使用Sum函数在一个ROW中组合少量数据并且不对所有行执行此操作

时间:2011-05-02 01:00:53

标签: sql

恶魔请尽快帮助我。非常感谢,谢谢

我真的很简单。其中有三列

Col A                Col B                    Col C
(unique)nameA        (UniqueID)1              (somenumber)10  
(unique)nameB        (UniqueID)2              (somenumber)20 
(unique)nameC        (UniqueID)3              (somenumber)30 
(unique)nameD        (UniqueID)4              (somenumber)10 
(unique)nameE        (UniqueID)5              (somenumber)50 
(unique)nameF        (UniqueID)6              (somenumber)35 
(unique)nameG        (UniqueID)7              (somenumber)50 
(unique)nameH        (UniqueID)8              (somenumber)10     
(unique)nameI        (UniqueID)9              (somenumber)25   

根据我的报告要求,我需要结合唯一ID(1,2,3)给它一个唯一的名称ALFA并求和Col C值并结合(4,5,6)给它一个唯一的名称BETA和Sum他们的Col C值 并按原样在Col C中保留其他唯一ID,唯一名称及其值 在Col C Desc中按值排序并显示TOP 30结果。

所以最终结果应该是这样的

Col A                Col B                    Col C
BETA                 (unique ID 4,5,6)        95              --(10+50+35 from col C 
ALFA                 (unique ID 1,2,3)        60              --(10+20+30 from col C above)    
above)
(unique)nameG        (UniqueID)7              (somenumber)50 
(unique)nameI        (UniqueID)9              (somenumber)25
(unique)nameH        (UniqueID)8              (somenumber)10     

1 个答案:

答案 0 :(得分:0)

这类似的工作吗?

declare @simpletable table( name varchar(50), uniqueid int, somenumber int)
insert into @simpletable
select 'a', 1, 10
union all
select 'b', 2, 20
union all
select 'c', 3, 30
union all
select 'd', 4, 10
union all
select 'e', 5, 50
union all
select 'f', 6, 35
union all
select 'g', 7, 50
union all
select 'h', 8, 10
union all
select 'i', 9, 25

select top 30 name,uniqueid,somenumber
from
(
select 'ALFA' as name, '1,2,3' as uniqueid, sum(somenumber) as somenumber
from @simpletable
where uniqueid between 1 and 3
union all
select 'BETA' as name, '4,5,6' as uniqueid, sum(somenumber) as somenumber
from @simpletable
where uniqueid between 4  and 6
union all
select name as name, cast(uniqueid as varchar(50)) as uniqueid, somenumber as somenumber
from @simpletable
where uniqueid > 6
) as x
order by somenumber desc