如何将 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;

Demo

我使用 STUFFFOR 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, '') 

谢谢蒂姆