私はこれを読みました:http://blog.sqlauthority.com/2012/09/14/sql-server-grouping-by-multiple-columns-to-single-column-as-a-string/
そして、これを私のクエリの1つに適用できます。
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
1つのテーブルに直接参加できたので、これは機能しました...次に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()して、コンマで区切って表示する必要があります
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"
つまり、ジョーとジョンにはチケット1が割り当てられ、ジョーにはチケット2が割り当てられ、ジョンとジェイソンにはチケット3が割り当てられました。
したがって、STUFF()は、それらをチケットIDごとに1つの行にまとめるだけです。私はこれが効率的ではないことを知っています、私は今最適化を求めていません...
前述のように、チケットの割り当てを取得する必要があるクエリは次のとおりです。
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()して、コンマで区切って表示する必要があります