如何在 SQL Server 2014 中的 FOR XML 子句中分组?
How to group by in FOR XML clause in SQL Server 2014?
我在 fiddle
中有这个架构
我的代码:
SELECT
MUID, weekcounter,
STUFF((SELECT ',' + Category
FROM tb EE
WHERE EE.MUID = E.MUID AND Ranknum <= 3
FOR XML PATH, TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 1, N'') AS listStr
FROM tb E
GROUP BY E.MUID, E.weekcounter
我得到这样的错误输出:
我期待这个输出:
我没有在 SQL Server 2014 中使用 string_aggr()
的选项。
我相信如果您想获得所需的输出,您也必须在相关子查询(STUFF
部分)中使用您想要分组的两列。
试试这个代码:
SELECT
MUID, weekcounter,
STUFF((SELECT ',' + Category
FROM tb EE
WHERE EE.MUID = E.MUID
AND EE.weekcounter = E.weekcounter
AND Ranknum <= 3
FOR XML PATH, TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 1, N'') AS listStr
FROM
tb E
GROUP BY
E.MUID, E.weekcounter
我在 fiddle
中有这个架构我的代码:
SELECT
MUID, weekcounter,
STUFF((SELECT ',' + Category
FROM tb EE
WHERE EE.MUID = E.MUID AND Ranknum <= 3
FOR XML PATH, TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 1, N'') AS listStr
FROM tb E
GROUP BY E.MUID, E.weekcounter
我得到这样的错误输出:
我期待这个输出:
我没有在 SQL Server 2014 中使用 string_aggr()
的选项。
我相信如果您想获得所需的输出,您也必须在相关子查询(STUFF
部分)中使用您想要分组的两列。
试试这个代码:
SELECT
MUID, weekcounter,
STUFF((SELECT ',' + Category
FROM tb EE
WHERE EE.MUID = E.MUID
AND EE.weekcounter = E.weekcounter
AND Ranknum <= 3
FOR XML PATH, TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 1, N'') AS listStr
FROM
tb E
GROUP BY
E.MUID, E.weekcounter