首页 > 解决方案 > SQL - 两列按分组数据分成多列

问题描述

我的任务是想出一种翻译以下数据的方法:

Column_A    Column_B
----------------------
    A           AA
    A           BB
    B           CC
    B           DD
    C           EE
    C           FF
    C           GG

A   B   C
----------
AA  CC  EE
BB  DD  FF
        GG

等等..

Column_B 可以是 NULL 或空白,两者都可以,并且 Column_A 需要是动态的。我试图研究并登陆 PIVOT,但它需要 3 列才能转换。我试过这个答案,但结果是

A   B   C
----------
AA  BB  CC
DD  EE  FF
GG  

Column_A 可以有最少 25 个唯一记录。

标签: sqlsql-server

解决方案


您可以使用row_number()生成行号然后聚合:

select max(case when a = 'A' then b end) as a,
       max(case when a = 'B' then b end) as b,
       max(case when a = 'C' then b end) as c
from (select t.*, row_number() over (partition by a order by b) as seqnum
      from t
     ) t
group by seqnum
order by seqnum;

推荐阅读