我在SQL Server的一张表中有以下数据:
Id Dealer Region Comission
-----------------------------------------------------
177 Synergy Meditech North 217500.00
1 Indian Orthocare Surgicals South 1500.00
9 Indian Orthocare Surgicals South 1500.00
90 Indian Orthocare Surgicals West 9760.73
113 Indian Orthocare Surgicals West 39756.90
171 Innovative Concepts South 127500.00
172 Innovative Concepts South 142500.00
191 MIDMED HEALTHCARE North 427500.00
198 MIDMED HEALTHCARE North 199500.00
185 Cass Associates West 337500.00
我上面想要的输出是:
Id Dealer Region Comission
----------------------------------------------------------------
177 Synergy Meditech North 217500.00
1,9 Indian Orthocare Surgicals South 3000.00
90,113 Indian Orthocare Surgicals West 49517.63
171,172 Innovative Concepts South 270000.00
191,198 MIDMED HEALTHCARE North 627000.00
185 Cass Associates West 337500.00
即关于commission
和Dealer
分组的Region
列的总和,以及以逗号分隔的ID。
请帮助我。
答案 0 :(得分:3)
使用string_agg()
:
select string_agg(id, ',') within group (order by id) as ids,
dealer, region, sum(commission) as commission
from t
group by dealer, region;
在早期版本中:
select stuff( (select concat(',', t2.id)
from t t2
where t2.dealer = dr.dealer and t2.region = dr.region
order by t2.id
for xml path ('')
), 1, 1, ''
) as ids
dr.*
from (select dealer, region, sum(commission) as commission
from t
group by dealer, region
) dr;
id
似乎是数字,因此您不必担心特殊字符。
答案 1 :(得分:0)
我只是将其汇总为一条语句:
CREATE TABLE #tmp(Id int, Dealer varchar(50), Region varchar(20), Comission decimal(10,2))
INSERT INTO #tmp VALUES(177,'Synergy Meditech',' North',217500.00)
INSERT INTO #tmp VALUES(1,'Indian Orthocare Surgicals','South',1500.00)
INSERT INTO #tmp VALUES(9,'Indian Orthocare Surgicals','South',1500.00)
INSERT INTO #tmp VALUES(90,'Indian Orthocare Surgicals','West',9760.73)
INSERT INTO #tmp VALUES(113,'Indian Orthocare Surgicals','West',39756.90)
INSERT INTO #tmp VALUES(171,'Innovative Concepts','South',127500.00)
INSERT INTO #tmp VALUES(172,'Innovative Concepts','South',142500.00)
INSERT INTO #tmp VALUES(191,'MIDMED HEALTHCARE','North',427500.00)
INSERT INTO #tmp VALUES(198,'MIDMED HEALTHCARE','North',199500.00)
INSERT INTO #tmp VALUES(185,'Cass Associates','West',337500.00)
SELECT STUFF((
SELECT ',' + CAST(ID as varchar(5))
FROM #tmp t1 where t2.Dealer = t1.Dealer and t1.Region = t2.Region
FOR XML PATH('')
), 1, 1, ''), Dealer,Region,SUM(t2.Comission) Comission
FROM #tmp t2
GROUP by Dealer,Region