从数据集中删除重复值

时间:2013-02-08 19:48:08

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

我正在使用以下数据集开发SSRS报告(表-1)。我按帐户和期间分组。我的目标是在一个组内获得总费用和预算。由于预算数据是按组重复的,因此我无法对预算使用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     ...................

2 个答案:

答案 0 :(得分:1)

如果你必须在SQL中进行分组,我会使用窗口函数。如果你能在SSRS中做到这一点,只需添加一个'Row Grouping Parent',那就更好了。

对于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

答案 1 :(得分: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;
祝你好运。