如何将 return 个查询结果合并成一行
How to combine return results of query in one row
我有一个table保存人员代码。
当我从这个 table select 得到 3 行结果,例如:
2129,3394,3508,3534
2129,3508
4056
我想在创建时将 select 结果合并成一行,例如:
2129,3394,3508,3534,2129,3508,4056
或不同的值,例如:
2129,3394,3508,3534,4056
最好避免在 table 中存储 CSV 数据。也就是说,对于您的第一个结果集,我们可以尝试使用 STRING_AGG
:
SELECT STRING_AGG(col, ',') AS output
FROM yourTable;
你的第二个要求比较棘手,我们可以尝试通过 table 来删除重复项:
WITH cte AS (
SELECT DISTINCT VALUE AS col
FROM yourTable t
CROSS APPLY STRING_SPLIT(t.col, ',')
)
SELECT STRING_AGG(col, ',') WITHIN GROUP (ORDER BY CAST(col AS INT)) AS output
FROM cte;
我使用 STUFF
和 FOR XML PATH
解决了这个问题:
SELECT
STUFF((SELECT ',' + US.remain_uncompleted
FROM Table_request US
WHERE exclusive = 0 AND reqact = 1 AND reqend = 0
FOR XML PATH('')), 1, 1, '')
谢谢蒂姆
我有一个table保存人员代码。
当我从这个 table select 得到 3 行结果,例如:
2129,3394,3508,3534
2129,3508
4056
我想在创建时将 select 结果合并成一行,例如:
2129,3394,3508,3534,2129,3508,4056
或不同的值,例如:
2129,3394,3508,3534,4056
最好避免在 table 中存储 CSV 数据。也就是说,对于您的第一个结果集,我们可以尝试使用 STRING_AGG
:
SELECT STRING_AGG(col, ',') AS output
FROM yourTable;
你的第二个要求比较棘手,我们可以尝试通过 table 来删除重复项:
WITH cte AS (
SELECT DISTINCT VALUE AS col
FROM yourTable t
CROSS APPLY STRING_SPLIT(t.col, ',')
)
SELECT STRING_AGG(col, ',') WITHIN GROUP (ORDER BY CAST(col AS INT)) AS output
FROM cte;
我使用 STUFF
和 FOR XML PATH
解决了这个问题:
SELECT
STUFF((SELECT ',' + US.remain_uncompleted
FROM Table_request US
WHERE exclusive = 0 AND reqact = 1 AND reqend = 0
FOR XML PATH('')), 1, 1, '')
谢谢蒂姆