我读到这个:http: //blog.sqlauthority.com/2012/09/14/sql-server-grouping-by-multiple-columns-to-single-column-as-a-string/
我可以将此应用于我的一个查询:
SELECT t.TicketID, STUFF(
(SELECT ',' + tt.Tag
FROM TicketTag tt
WHERE tt.TicketID = t.TicketID
FOR XML PATH('')),1,1,'') AS CSV
FROM Ticket AS t
GROUP BY t.TicketID
GO
这会导致如下所示:
TicketID CSV
1 tsql, sqlserver, c++
2 hi, bye, no
现在这行得通,因为我能够直接加入一个表......现在我想STUFF()
再次申请以显示分配给它的 TicketID。
显示被分配工单的人的查询如下:
SELECT l.Login
FROM Ticket t1
LEFT JOIN
TicketAssignments tass
ON
tass.TicketID=t1.TicketID
LEFT JOIN
Login l
ON
l.LoginID = tass.LoginID
但是,我缺少两个关键的东西:
1)我需要像在第一个示例中一样显示 TicketID(按 ticketID 分组) 2)我需要 STUFF() 登录名,以便它以逗号分隔
请坚持使用 STUFF() 我知道有时它可能不是最好的方法,但我只是想在我的代码中使用它。
编辑
3张桌子
Ticket
------
TicketID
TicketAssignments
-----------------
TicketID
LoginID
Login
------
LoginID
Sample data:
Ticket
------
1
2
3
TicketAssignments
------------------
1 25
1 26
2 25
3 26
3 27
Login
-----
25 Joe
26 Jon
27 Jason
我想要的结果:
TicketID Assignment
--------------------
1, "Joe, Jon"
2, "Joe"
3, "Jon", "Jason"
也就是说,Joe 和 Jon 被分配了工单 1,Joe 被分配了工单 2 Jon 和 Jason 被分配到工单 3
所以 STUFF() 只是将它们放在每个ticketid 的一行中。我知道这效率不高,我现在不要求优化......
如前所述,我必须获得票证分配的查询是:
SELECT l.Login FROM Ticket t1 LEFT JOIN TicketAssignments tass ON tass.TicketID=t1.TicketID LEFT JOIN Login l ON l.LoginID = tass.LoginID
但是,我缺少 2 个关键的东西:1)我需要显示 TicketID,就像我在第一个示例中一样(按 ticketID 分组)2)我需要 STUFF() 登录名,以便它以逗号分隔