sql - ORACLE中的行到列

标签 sql oracle pivot

这是查询的结果。有很多组,但最多三个与一个人相关联。

NAME     ID    GROUPA
=====================
James    20    A
James    20    B
James    20    D
Michael  30    A
Michael  30    B
Michael  30    C
Jordan   40    I

我想要的是...

NAME     ID    GROUP1     GROUP2     GROUP3
===========================================
James    20    A          B          D
Michael  30    A          B          C
Jordan   40    I

我试过这个查询,但它不起作用...

SELECT NAME, ID, GROUPA
FROM 
    (SELECT NAME, ID, 
        ROW_NUMBER() OVER (PARTITION BY GROUPA ORDER BY EMPLOYEE_ID) AS GROUP
    FROM TABLE1)
GROUP BY NAME, ID, GROUPA

感谢您的指导。

最佳答案

select name,id, 
 max(case when groupa = 'A' then groupa end) as group1,
  max(case when groupa = 'B' then groupa end) as group2,
  max( case when groupa = 'C' then groupa end) as group3
   from tablename
   group by name, id

如果 groupa 的数量是固定的,上面的查询就可以工作。

编辑:使用枢轴

 select * from
  (select name, id , groupa from tablename)
  pivot xml (
  max(groupa) for groupa in
   (select distinct groupa from tablename)
   )

感谢您的解决方案。我快到了。这是我运行此查询后得到的。实际上有 53 个不同的组,因此它添加了 53 列,但分配给用户的最大组数是 5。

NAME      ID      A      B      C     D      E      F      G      H
James     20      A      null   null  null   null   null   null   H
Michael   30      A      B      null  null   E      null   null   null

我如何获得这样的结果...

NAME      ID      GROUP_1  GROUP_2  GROUP_3
James     20      A        H
Michael   30      A        B        E

如何获得我在问题中提到的结果? 谢谢,

关于sql - ORACLE中的行到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32828265/

相关文章:

mysql - 高效查询 - 当查询A表中的一组特定ID时,如何检查B表中的条件是否符合A表中选定的ID?

sql - 确定 Nvarchar 长度

java - 如何直接读取Oracle数据泵二进制转储文件?

SQL:将个人的不同诊断放入水平行中

sql - 我可以使用 Developer 版本的 SQL Server 复制组件吗?

c++ - 使用 sqlapi C++ 访问 Oracle 数据库

xml - 如何在 Oracle 中对以下 XML 使用 XMLTable

oracle - PL/SQL 在 Oracle 中插入具有长原始列的历史行

excel - 在 ActiveX 按钮单击上捕获工作表名称

SSIS - 旋转多个记录中的重复值