Tsql 连接联接查询中的字段

Tsql 连接联接查询中的字段,tsql,concatenation,for-xml-path,Tsql,Concatenation,For Xml Path,我需要使用使用内部联接和左联接的T-SQL查询的连接结果更新字段。我能够用一个更简单的查询来处理这些东西和XML路径函数,但我用更复杂的查询来完成同样的过程的努力并没有成功 这是一个查询,它为我提供了所需的结果,ID字段将作为分组结束,而Step字段将是每个ID的一个字段中需要连接的值的字段 SELECT sc.ID, sc.STEP FROM Table1 As sc INNER JOIN Table2 As f ON sc.STEP = f.Step AND sc.STEP_TYPE

我需要使用使用内部联接和左联接的T-SQL查询的连接结果更新字段。我能够用一个更简单的查询来处理这些东西和XML路径函数,但我用更复杂的查询来完成同样的过程的努力并没有成功

这是一个查询,它为我提供了所需的结果,ID字段将作为分组结束,而Step字段将是每个ID的一个字段中需要连接的值的字段

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------步骤
  • 01-101
  • 01-102
  • 01-103
  • 02-107
  • 02-113
我需要的是:

•ID------步骤
  • 01-101、102、103
  • 02-107113
以下是我到目前为止所做的尝试:

;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

这里的问题是,我得到的是所有REOCRD的串联,而不仅仅是在单个ID上分组的REOCRD。我尝试了各种方法来安排联接,但到目前为止没有任何效果。

您已经非常接近了:您的第一个查询已经开始工作了。假设结果进入表1

SELECT  Distinct
        sc1.ID,
    STUFF (( Select  ',' + sc2.STEP 
    FROM #Table1 AS SC2
    WHERE sc2.ID = sc1.ID
    FOR XML PATH('')),1,1,'') AS STEPS
FROM #Table1 AS SC1
ORDER BY sc1.ID
因此,要使用以下方法将其组合到单个查询中:

    ;WITH IDSteps AS (
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
)
SELECT  Distinct
        sc1.ID,
    STUFF (( Select  ',' + sc2.STEP 
    FROM IDSteps AS SC2
    WHERE sc2.ID = sc1.ID
    FOR XML PATH('')),1,1,'') AS STEPS
FROM IDSteps AS SC1
ORDER BY sc1.ID;