在我的SQL数据库中,我有几个用户和几个组。因此,现在我当前的查询存在查询显示的问题:
有什么方法可以获取查询结果:
我已经尝试了'group_concat',但是我的SQL Server不知道该命令。
答案 0 :(得分:2)
使用XML可能是一种可能的解决方案,尤其是如果您还不能使用STRING_AGG()
。
SELECT DISTINCT
[ID],
[user],
STUFF((SELECT ', ' + [group]
FROM [MyTable]
WHERE [ID] = T.[ID] AND [user] = T.[user]
FOR XML PATH('')), 1, 2, '') AS [groups]
FROM
[MyTable] AS T
子查询将组转换为“ XML”结果字符串(在这种情况下,只是纯文本)。每个单独的组前面都有一个分隔符(', '
),在这种情况下,分隔符的长度为2个字符。应该使用STUFF
函数从最终结果中删除第一个分隔符。
答案 1 :(得分:0)
group_concat()
是特定于MySQL的,因此您不能在SQL Server中使用它。
从SQL Server 2017开始,使用STRING_AGG()
函数,这是可能的:
SELECT ID, [User], STRING_AGG ([group], ', ') AS [group]
FROM TableName
GROUP BY ID, [User]
答案 2 :(得分:0)
有空的时候看看下面的链接。
https://www.red-gate.com/simple-talk/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
您将从该资源中学到很多东西。
SELECT *
FROM [NORTHWND].[dbo].[Products]
SELECT CategoryId,
MAX( CASE seq WHEN 1 THEN ProductName ELSE '' END ) + ', ' +
MAX( CASE seq WHEN 2 THEN ProductName ELSE '' END ) + ', ' +
MAX( CASE seq WHEN 3 THEN ProductName ELSE '' END ) + ', ' +
MAX( CASE seq WHEN 4 THEN ProductName ELSE '' END )
FROM ( SELECT p1.CategoryId, p1.ProductName,
( SELECT COUNT(*)
FROM NORTHWND.dbo.Products p2
WHERE p2.CategoryId = p1.CategoryId
AND p2.ProductName <= p1.ProductName )
FROM NORTHWND.dbo.Products p1 ) D ( CategoryId, ProductName, seq )
GROUP BY CategoryId ;