如何使用GROUP BY连接SQL Server中的不同列?
问题描述:
我如何获得:如何使用GROUP BY连接SQL Server中的不同列?
ID Description Details
1 A Details 1
1 B Details 2
2 A Details 3
2 A Details 4
2 B Details 5
3 B Details 6
3 B Details 7
3 B Details 8
TO:
ID Values
1 A: Details 1 - B: Details 2
2 A: Details 3, Details 4 - B:Details 5
3 B: Details 6, Details 7, Details 8
我试图按照这个线程解决方案: How to use GROUP BY to concatenate strings in SQL Server?
但是这给:
ID Values
1 A: Details 1 - B: Details 2
2 A: Details 3, A: Details 4 - B:Details 5
3 B: Details 6, B:Details 7, B:Details 8
有没有办法不重复描述结果集中的ption列?
谢谢!
答
使用ROW_NUMBER
仅在第一项中添加Description
:
WITH Cte AS(
SELECT *,
rn = ROW_NUMBER() OVER(PARTITION BY Id, Description ORDER BY Details)
FROM #tbl
)
SELECT
ID,
[Values] =
STUFF((
SELECT
CASE WHEN rn = 1 THEN ' - ' + Description + ': ' ELSE ', ' END + Details
FROM Cte
WHERE Id = t.Id
ORDER BY Description, Details
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
, 1, 2, '')
FROM #tbl t
GROUP BY Id
答
我已经修改了你的表名替换#tew获得所需要的output.Kindly查询。 我希望这对你有帮助。
;with cte as
(SELECT distinct ID,Description + ':' +
STUFF(
(SELECT ',' + SubTableUser.Details
FROM #tew AS SubTableUser
WHERE SubTableUser.ID = outerTable.ID and SubTableUser.Description = outerTable.Description
FOR XML PATH('')), 1, 1, '') AS Details
FROM #tew as outerTable
)
select distinct ID,
STUFF(
(SELECT ',' + SubTableUser.Details
FROM cte AS SubTableUser
WHERE SubTableUser.ID = outerTable.ID
FOR XML PATH('')), 1, 1, '') AS Details
FROM cte as outerTable
order by ID
你可以发布你用来得到结果的查询吗?很可能你需要从'STUFF'的内部连接中去除'Description'列到外部,所以你只能得到'B'或'A'一次。 –
我发布了上面提供查询的链接。 :) – ohhzumm
完成整个路径:'Tbl.description +':'+ tbl.Details',这将提供所需的结果。 – sagi