【问题标题】:Removing duplicate values from a dataset从数据集中删除重复值
【发布时间】:2013-02-08 19:48:07
【问题描述】:

我正在使用以下数据集(表 1)开发 SSRS 报告。我按帐户和期间分组。我的目标是在一个组内获得总费用和预算。因为每个组的预算数据都是重复的,所以我不能对预算使用 SUM() 函数。如何删除重复项,使新数据集看起来像这样? (表2)请指教。感谢您的宝贵时间。

表 1

ID Account Period  Expense Budget
1  100     201301  20      100
2  100     201301  30      100
3  100     201302  10      150
4  100     201302  40      150
5  200     ...................

表 2

ID Account Period  Expense Budget
1  100     201301  20      100
2  100     201301  30      NULL
3  100     201302  10      150
4  100     201302  40      NULL
5  200     ...................

【问题讨论】:

  • 如果您改为将每个组的 Expense 相加... 这样您就可以始终如一地显示每个组的总费用和总预算?

标签: sql-server-2008 tsql sql-update


【解决方案1】:

如果你真的想让重复预算为空,试试这个更新命令

请检查 sqlfiddle http://sqlfiddle.com/#!3/1e619/11

Update table1 
set budget = null
where id in
(
      select aa.id from
        (
          select id,row_number() 
          over(partition by Budget order by Period) as rno
          from table1
        ) aa
     where rno > 1
);

select * from table1;

祝你好运。

【讨论】:

    【解决方案2】:

    如果您必须在 SQL 中进行分组,我会使用窗口函数。如果您可以在 SSRS 中执行此操作,只需添加一个“行分组父级”会更好。

    对于 SQL,我会这样做:

    declare @Temp table ( ID int identity, Account int, period int, expense int, budget int);
    
    insert into @Temp values (100, 201301,  20, 100),(100, 201301,  30, 100),(100, 201302,  10, 150),(100, 201302,  40, 150)
    
    select *
    from @Temp
    
    select 
        ID
    ,   Account
    ,   Period
    ,   Expense
    ,   case when (row_number() over(partition by Budget order by Period) = 1) then Budget end  as Budget-- only shows first occurrence of an order amount ordering by person
    from @Temp
    

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      相关资源
      最近更新 更多