CREATE TABLE [dbo].[theRecords](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50) NULL,
[thegroup] [varchar](50) NULL,
[balance] [int] NULL,
)
GO
insert into theRecords values('blue',1,10)
insert into theRecords values('green',1,20)
insert into theRecords values('yellow',2,5)
insert into theRecords values('red',2,4)
insert into theRecords values('white',3,10)
insert into theRecords values('black',4,10)
首先,我希望获得每个组中的余额总和,然后对于只有一个组的名称,应保留名称,然后属于同一组的名称的名称也应更改为组名。 / p>
name | balance
1 30
2 9
white 10
black 10
答案 0 :(得分:2)
为了确定所有名称是否相同,我想比较最小值到最大值:
select (case when min(name) = max(name) then max(name)
else thegroup
end) as name,
sum(balance) as balance
from theRecords r
group by thegroup;
计算min()
和max()
通常比count(distinct)
更有效。
答案 1 :(得分:0)
使用组功能将名称与每个名称的余额之和进行分组。
请执行以下操作:
select thegroup "name", sum(balance) "balance"
from theRecords group by thegroup order by 1;
答案 2 :(得分:0)
select case count(distinct name)
when 1 then name
else thegroup
end as name,
sum(balance) as balance
from theRecords
group by thegroup