使用拆分器将已按[重复]分组的不同值连接在一起

问题描述 投票:0回答:1

图片中的结果是 UNION ALL 内部选择的结果。

我在将分配给同一 ID 的值连接在一起时遇到问题。 在内部选择中,我可以获得多个相同的 ID 结果,但始终具有不同的 ValueField 值。 我需要按 inn.ID 对结果进行分组,并且需要将所有不同的 ValueField 连接到 1 列中。不同的值将用“,”分隔。您无需担心 UNION ALL 结果,这是正确的,我需要处理该结果

所以如果我的选择返回

ID: xxx FieldValue: FV1 
ID: xxx FieldValue: FV55 
ID: xxx FieldValue: FV66 
ID: 123 FieldValue: FV789

那么最终结果将是:

ID: xxx FieldValue: FV1, FV55, FV66
ID: 123 FieldValue: FV789

这是我当前的代码:

SELECT 
    inn.ID 
    --STUFF GROUPPED RESULTS(ValueField)

FROM
(
    SELECT te2.Root_ID AS ID, te1.ValueField 
    FROM TableExample2 AS te2
    LEFT JOIN TableExample1 te1 ON te2.te1ID= te1.ID
    WHERE te1.Deleted = 0
    GROUP BY te2.Root_ID, te1.ValueField

    UNION ALL

    SELECT ID, ValueField          
    FROM TableExample1 AS main
    WHERE ID IS NOT NULL

) AS inn

GROUP BY inn.ID

我想使用 GROUP_CONCAT,但我的 SQL Server 不支持。 我尝试使用 STUFF(),但我的结果尚未分组和连接。

非常感谢您的帮助。我很欣赏它

sql sql-server sql-server-2014
1个回答
0
投票

以下是使用 CTE 修改查询的方法:

;WITH inn AS (
    SELECT te2.Root_ID AS ID, te1.ValueField 
    FROM TableExample2 AS te2
    LEFT JOIN TableExample1 te1 ON te2.te1ID = te1.ID
    WHERE te1.Deleted = 0
    GROUP BY te2.Root_ID, te1.ValueField
    UNION ALL
    SELECT ID, ValueField          
    FROM TableExample1 AS main
    WHERE ID IS NOT NULL
)
SELECT 
    ID,
    STUFF((SELECT ', ' + CAST(inn2.ValueField AS VARCHAR(MAX))
           FROM inn AS inn2
           WHERE inn2.ID = inn.ID
           FOR XML PATH('')), 1, 2, '') AS GroupedFieldValues
FROM inn
GROUP BY ID;
© www.soinside.com 2019 - 2024. All rights reserved.