INNER JOIN と LEFT JOIN を使用する T-SQL クエリの連結結果でフィールドを更新する必要があります。STUFF 関数と FOR XML PATH 関数を使用して、より単純なクエリでこれを行うことができましたが、より複雑なクエリで同じプロセスを実行しようとしてもうまくいきませんでした。
これは、ID フィールドが最終的にグループ化され、Step フィールドは、連結された値が 1 つの ID ごとに 1 つのフィールドにある必要がある結果を提供するクエリです。
SELECT sc.ID, sc.STEP
FROM Table1 As sc
INNER JOIN Table2 As f
ON sc.STEP = f.Step AND sc.STEP_TYPE = f.StepType AND
sc.OldStep = f.OldStep
LEFT JOIN Table3 As l
ON sc.ID = l.ID
WHERE f.Group = l.Group AND sc.CompDate IS NULL
これにより、ID ごとに複数のフィールドに分割された結果が得られます
•ID-----STEP
- 01 - 101
- 01 - 102
- 01 - 103
- 02 - 107
- 02 - 113
そして、私が必要とするのは:
•ID-----STEP
- 01 - 101、102、103
- 02 - 107、113
これが私がこれまでに試したことです:
;With OA As
( SELECT s.ID, STUFF((
SELECT ', ' + sc.STEP
FROM Table1 As sc
WHERE sc.ID = s.ID
ORDER BY sc.ID
FOR XML PATH('')),1,1,'') As Steps
FROM Table1 As s
INNER JOIN Table2 As f
ON s.STEP = f.Step AND s.STEP_TYPE = f.StepType
AND s.OldStep = f.OldStep
LEFT JOIN Table3 As l
ON s.ID = l.ID
WHERE f.Group = l.Group AND s.CompDate IS NULL
GROUP BY s.ID
)
SELECT * FROM OpenAuditSteps
ここでの問題は、個々の ID でグループ化されたレコードだけでなく、すべてのレコードの連結を取得していることです。結合を配置するさまざまな方法を試しましたが、これまでのところ何も機能していません。