旋转一列并选择以逗号分隔的逗号

时间:2013-11-07 08:43:05

标签: sql

我有一张这样的表:

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一样。

2 个答案:

答案 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) 
相关问题