サーバー2008のMS SQLで、1つのテーブルの行をクエリと結合しようとしています。このコードをここから取り出したと思います。これは私のニーズにほぼ合っていますが、SOPartsUsed からシリアル番号をグループ化していますが、tblServiceOrders.ProjectKeyID に基づいてグループ化する必要があります。私はSQLについてあまり知りません。私が達成しようとしていることのより詳細な説明を以下に残します。
SELECT
p1.ItemID, SerialNumbers AS SerialNumber
FROM
tblSOPartsUsed p1 INNER JOIN
tblServiceOrders p2 ON p1.SONumber = p2.SONumber
CROSS APPLY
(SELECT
stuff
((SELECT ',' + p3.SerialNumber
FROM tblSerialNumbers p3
WHERE p3.FKSOPartsUsed = p1.SOPartsUsedKeyID
ORDER BY SerialNumber FOR XML PATH(''), TYPE ).value('.', 'varchar(max)'), 1, 1, '')
) D (SerialNumbers)
WHERE (p1.QuantityFilled > 0) AND (p2.ProjectKeyID = 385)
GROUP BY p1.ItemID, SerialNumbers, p2.ProjectKeyID
ORDER BY p1.ItemID
シリアル番号を含むテーブル、サービス注文で使用される部品を含むテーブル、およびサービス注文テーブルがあります。
tblSerialNumbers -> tblSOPartsUsed -> tblServiceOrders
tblSerialNumbers
itemID SerialNumber FKSOPartsUsed
1 1444 233
1 1555 234
1 1666 236
1 1999 237
1 1888 238
1 2222 239
1 2121 240
tblSOPartsUsed
itemID SOPartsUsed SONumber QuantityFilled
1 233 SO544 5
1 234 SO544 7
1 236 SO544 7
1 237 SO577 7
1 238 SO577 7
1 239 SO581 7
1 240 SO580 7
tblServiceOrders
SO番号 ProjectKeyID
SO544 PJ366
SO577 PJ366
SO580 PJ111
SO581 PJ111
お願いしたいこと
itemID ProjectKeyID SerialNumber
1 PJ366 1444,1555,1666,1999,1888
私が得たもの
itemID ProjectKeyID SerialNumber
1 PJ366 1444,1555,1666
1 PJ366 1999,1888
tblServiceOrders にある ProjectKeyID でシリアル番号とアイテム ID をグループ化しようとしています。現在、上記のクエリは機能していますが、tblSOPartsUsed で ItemID をグループ化しており、ProjectKeyID でグループ化したいと考えています。
助けてくれてありがとう。