简体   繁体   中英

How to combine return results of query in one row

I have a table that save personnel code.

When I select from this table I get 3 rows result such as:

2129,3394,3508,3534
2129,3508
4056

I want when create select result combine in one row such as:

2129,3394,3508,3534,2129,3508,4056

or distinct value such as:

2129,3394,3508,3534,4056

You should ideally avoid storing CSV data at all in your tables. That being said, for your first result set we can try using STRING_AGG :

SELECT STRING_AGG(col, ',') AS output
FROM yourTable;

Your second requirement is more tricky, and we can try going through a table to remove duplicates:

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

I solved this by using STUFF and 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, '') 

Thank you Tim

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM