图片中的结果是 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(),但我的结果尚未分组和连接。
非常感谢您的帮助。我很欣赏它
以下是使用 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;