SQL 服务器 Group By Group Concat
SQL Server Group By with Group Concat
我有一个table这样的
Hospital Insurance PatientCount
H1 I1 1
H1 I1 2
H2 I1 1
H2 I2 1
想通过保险将此 table 分组为,
Hospital Insurance PatientCount
H1,H2 I1 4
H2 I2 1
尝试使用
select
stuff((select ', ' + Hospital
from Insurances
where (InsuranceName = i.InsuranceName)
for xml path(''),type).value('(./text())[1]','varchar(max)')
,1,2,'') as Hospitals,
i.InsuranceName,
sum(i.PatientsCount)
from Insurances i
group by i.InsuranceName;
输出:
Hospital Insurance PatientCount
H1,H1,H2 I1 4
H2 I2 1
只需要将 DISTINCT
添加到 STUFF
。
select
stuff((select DISTINCT ', ' + Hospital
from A
where (InsuranceName = i.InsuranceName)
for xml path(''),type).value('(./text())[1]','varchar(max)')
,1,2,'') as Hospitals,
i.InsuranceName,
sum(i.PatientCount)
from A i
group by i.InsuranceName;
此语法有效:
DECLARE @t table
(Hospital char(2), InsuranceName char(2), PatientCount int)
INSERT @t values
('H1','I1',1),
('H1','I1',2),
('H2','I1',1),
('H2','I2',1)
SELECT
STUFF((
SELECT ',' + [Hospital]
FROM @t t1
WHERE t1.InsuranceName = t.InsuranceName
GROUP BY [Hospital]
for xml path(''), type
).value('.', 'varchar(max)'), 1, 1, '') Hospital,
InsuranceName,
SUM(PatientCount) [Patientcount]
FROM @t t
GROUP BY InsuranceName
结果:
Hospital InsuranceName Patientcount
H1,H2 I1 3
H2 I2 1
我有一个table这样的
Hospital Insurance PatientCount
H1 I1 1
H1 I1 2
H2 I1 1
H2 I2 1
想通过保险将此 table 分组为,
Hospital Insurance PatientCount
H1,H2 I1 4
H2 I2 1
尝试使用
select
stuff((select ', ' + Hospital
from Insurances
where (InsuranceName = i.InsuranceName)
for xml path(''),type).value('(./text())[1]','varchar(max)')
,1,2,'') as Hospitals,
i.InsuranceName,
sum(i.PatientsCount)
from Insurances i
group by i.InsuranceName;
输出:
Hospital Insurance PatientCount
H1,H1,H2 I1 4
H2 I2 1
只需要将 DISTINCT
添加到 STUFF
。
select
stuff((select DISTINCT ', ' + Hospital
from A
where (InsuranceName = i.InsuranceName)
for xml path(''),type).value('(./text())[1]','varchar(max)')
,1,2,'') as Hospitals,
i.InsuranceName,
sum(i.PatientCount)
from A i
group by i.InsuranceName;
此语法有效:
DECLARE @t table
(Hospital char(2), InsuranceName char(2), PatientCount int)
INSERT @t values
('H1','I1',1),
('H1','I1',2),
('H2','I1',1),
('H2','I2',1)
SELECT
STUFF((
SELECT ',' + [Hospital]
FROM @t t1
WHERE t1.InsuranceName = t.InsuranceName
GROUP BY [Hospital]
for xml path(''), type
).value('.', 'varchar(max)'), 1, 1, '') Hospital,
InsuranceName,
SUM(PatientCount) [Patientcount]
FROM @t t
GROUP BY InsuranceName
结果:
Hospital InsuranceName Patientcount
H1,H2 I1 3
H2 I2 1