图中结果是UNION ALL INTERNAL SELECT的结果.

我在连接分配给同一ID的值时遇到了问题. 在INTER SELECT中,我可以获得多个相同的ID结果,但始终具有不同的ValueField值. 我需要按inn.ID对结果进行分组,我需要将所有不同的Valuefield连接到1列中.不同的值将被‘,’分割.你不需要担心Union All的结果,这是正确的,我需要处理这个结果

所以如果我的SELECT返回

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

enter image description here

我想使用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;

Sql相关问答推荐

在SQL中向每个子字节组添加字节行

判断Pyspark生成的SQL查询

基于时间的SQL聚合

从以前的非空值行中获取值

使用占位符向SQL INSERT查询添加 case

Oracle中的时间戳

无法将发票与产品价格相关联

从类似JSON的字符串列创建新列

SQL将三个表中的三列组合为一列

group-by-clause具有特定列,而不是oracle的toad中的all

为什么左联接结果在MS Access数据库中不匹配

在SQL中转换差异表的多列

替换SQL Server XML中多处出现的 node 值

SQL ORACLE - 查找连续天数

查询中获取审批者不起作用

带有数组输入参数的Snowflake UDF优化

T-SQL 查询计算日期在其他列中定义的日期之间绑定的行数

交叉应用 OPENJSON / PIVOT - 错误的顺序

创建一个将层次 struct 级别放入列中的查询

如何在 Trino/Presto 中过滤掉 map 中的某些键?