在 SQL Server 中合并查询中的行

Posted

技术标签:

【中文标题】在 SQL Server 中合并查询中的行【英文标题】:Combine rows from a query in SQL Server 【发布时间】:2020-11-23 07:41:12 【问题描述】:

我希望合并来自给定子查询的行。如果可能的话,我还希望将子查询保存在变量中。如果不保存变量,我会收到错误,因为结果超过 1 个。

DECLARE @myquery NVARCHAR(MAX);

SET @myquery = (select cm.USER_ID
                from mytable cm 
                where cm.USER_ID = 'A' or USER_ID = 'B'
                group by cm.USER_ID
                having count(1) > 1);

select string_agg(cast(@myquery as NVARCHAR(MAX)) , ', ') as DuplicateList 
from mytable cm

【问题讨论】:

使用表变量保存查询结果。 【参考方案1】:

试试这个:

SELECT string_agg([user_id] , ', ')
FROM 
(
    select cm.USER_ID
    from mytable cm 
    where cm.USER_ID = 'A' or USER_ID = 'B'
    group by cm.USER_ID
    having count(1) > 1
) DS ([user_id]);

【讨论】:

什么是 DS ?不是 AS,确定吗? @Hax 是子查询的别名。 为什么不是AS? @Has 你可以写成AS DS - 并且DS 缺少DataSource - 你可以使用有效的名字。【参考方案2】:

试试这个:

DECLARE @myquery TABLE( USER_ID NVARCHAR( MAX ) );

INSERT @myquery SELECT cm.USER_ID
                FROM mytable cm 
                WHERE cm.USER_ID = 'A' OR USER_ID = 'B'
                GROUP BY cm.USER_ID
                HAVING count(1) > 1;

SELECT string_agg( CAST(@myquery.USER_ID as NVARCHAR(MAX) ) , ', ' ) AS DuplicateList 
FROM mytable cm
INNER JOIN @myquery mq
    ON mq.USER_ID =  cm.USER_ID

【讨论】:

以上是关于在 SQL Server 中合并查询中的行的主要内容,如果未能解决你的问题,请参考以下文章

在SQL炼金术查询中合并相似的行

sql server 在不匹配时与多个插入合并

sql 用union合并合并查询结果

有没有啥简单的方法可以在 Linq 中实现 SQL Server 的合并查询?

电源查询。合并具有折叠值的行中的重复行

Power Queries 为另一个查询的每一列合并/添加文件中的行