我有一张这样的表:
PK | COL1 | COL2
----------------
1 | A | a
2 | B | b
3 | C | c
4 | A | d
5 | A | e
6 | B | f
7 | C | g
8 | C | h
我想做一个选择我得到以下结果
COL1 | COL2
---------------
A | a,d,e
B | b,f
C | c,g,h
目前我理解SQL,如果没有“编程”额外的e.q.我不知道如何做到这一点。用PL / SQL
但我搜索DBMS独立解决方案,就像它可以独立于DBMS一样。
答案 0 :(得分:2)
这是Oracle(11.2)解决方案:
select col1,
listagg(col2, ',') within group (order by col1) as col2
from the_table
group by col1;
对于其他DBMS也需要这个,这将是Postgres解决方案:
select col1,
string_agg(col2, ',' order by col1) as col2
from the_table
group by col1;
对于MySQL,这将是:
select col1,
group_concat(col2 ORDER BY col1 SEPARATOR ',') as col2
from the_table
group by col1;
对于SQL Server解决方案,请参阅Vijaykumar的回答。
答案 1 :(得分:0)
SELECT [col1],
SUBSTRING(d.col2,1, LEN(d.col2) - 1) col2
FROM
(
SELECT DISTINCT [col1]
FROM table1
) a
CROSS APPLY
(
SELECT [col2] + ', '
FROM table1 AS b
WHERE a.[col1] = b.[col1]
FOR XML PATH('')
) d (col2)