在 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 中合并查询中的行的主要内容,如果未能解决你的问题,请参考以下文章