在SQL Server中合并查询中的行

在SQL Server中合并查询中的行,sql,sql-server,select,Sql,Sql Server,Select,我希望合并给定子查询中的行。如果可能的话,我还希望将子查询保存在变量中。在不保留变量的情况下,由于存在多个结果,因此会出现错误 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.US

我希望合并给定子查询中的行。如果可能的话,我还希望将子查询保存在变量中。在不保留变量的情况下,由于存在多个结果,因此会出现错误

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
试试这个:

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]);
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
试试这个:

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]);
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
试试这个:

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]);
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
试试这个:

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]);
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

使用表变量保存查询结果。使用表变量保存查询结果。什么是DS?不是AS,是吗?@Hax它是子查询的别名。为什么不是AS?@Has你可以将它写成
AS DS
-并且
DS
缺少
数据源
-你可以使用有效的名称。什么是DS?不是AS,确定吗?@Hax它是子查询的别名。为什么不是AS?@您可以将其写成
AS DS
-并且
DS
缺少
数据源
-您可以使用有效名称。