有没有办法将列的值聚合和/或连接为 Group By 查询中的逗号分隔项?
Posted
技术标签:
【中文标题】有没有办法将列的值聚合和/或连接为 Group By 查询中的逗号分隔项?【英文标题】:Is there any way to aggregate and/or concatenate the values of a column as comma separated items in a Group By query? 【发布时间】:2013-07-21 17:06:09 【问题描述】:这是我使用多层SELECT
查询检索到的数据:
TID StartID EndID StartTime EndTime ResName
1 1491005 1491020 2013-07-15 06:43:50.000 2013-07-15 06:44:38.000 NULL
1 1501403 1502819 2013-07-15 12:52:41.000 2013-07-15 13:40:10.000 TT Bill
1 1490838 1508632 2013-07-15 06:35:25.000 2013-07-15 16:57:10.000 TA Brady-MGR
1 1491039 1491267 2013-07-15 06:45:32.000 2013-07-15 06:56:35.000 TA Larry-Drv
2 1508739 1508939 2013-07-15 07:33:32.000 2013-07-15 07:44:35.000 TN John
我需要通过 TID 来GROUP
这个数据,以便所有具有相同 TID 的 ResName 值都显示为逗号分隔值。
例如: 对于 TID 1,最后一列 TIDNames 的值必须是 TT Bill,TA Brady, TA Larry 。
我正在为 GROUPING
使用以下查询 Select G.TID,
Min(G.StartId) As MinSID, Max(G.EndId) As MaxSID,
Min(G.StartTime) As MinStartTime, Max(G.EndTime) As MaxStartTime,
'I need comma separated ResName values for my TID here' As TIDNames
From (
nested select - this is where I get the above data which needs further grouping
) G
Group By G.TID;
我试图在这个小提琴中模拟这种场景(而不是嵌套选择,我将数据存储在一个表中):http://sqlfiddle.com/#!3/f3267/1
【问题讨论】:
【参考方案1】:您可以使用 FOR XML PATH 将值连接成一行:
Select t1.TID,
Min(t1.StartId) As MinSID,
Max(t1.EndId) As MaxSID,
Min(t1.StartTime) As MinStartTime,
Max(t1.EndTime) As MaxStartTime,
STUFF((SELECT ', ' + t2.ResName
FROM Item t2
where t1.TID = t2.TID
FOR XML PATH (''))
, 1, 1, '') AS TIDNames
From Item t1
Group By t1.TID;
见SQL Fiddle with Demo。
如果您查询的数据来自另一个查询,那么您可以使用 CTE:
;with cte as
(
select * from yourqueryHere
)
select t1.TID,
Min(t1.StartId) As MinSID,
Max(t1.EndId) As MaxSID,
Min(t1.StartTime) As MinStartTime,
Max(t1.EndTime) As MaxStartTime,
STUFF((SELECT ', ' + t2.ResName
FROM cte t2
where t1.TID = t2.TID
FOR XML PATH (''))
, 1, 1, '') AS TIDNames
From cte t1
Group By t1.TID;
见SQL Fiddle with Demo
【讨论】:
item table 只是一个 sub select 的模拟。有什么办法处理吗?我没有将这些数据存储在实际表中。 我想我可以使用 CTE。让我试试。 是的,完全正确。感谢您的帮助和时间。 +1 和正确的解决方案。 @Learner 是的,这是一个错字。以上是关于有没有办法将列的值聚合和/或连接为 Group By 查询中的逗号分隔项?的主要内容,如果未能解决你的问题,请参考以下文章