sql - oracle sql从行到列

标签 sql oracle

我需要编写一条 Oracle SQL 语句将 table1 转换为 table2

 number    name    
  1         A
  1         B
  2         A
  2         E
  3         D
number  name1   name2   name3   name4
  1      A      B       
  2      A      E   
  3      D          

我尝试使用 listagg 但这给了我一列

最佳答案

除非您使用动态 SQL,否则您必须预先定义许多列。

如果您对 4 次感到满意,则可以加入该表 4 次。

或者...

WITH rankedResults AS (
    SELECT
         number
        ,name1
        ,RANK() OVER (PARTITION BY number ORDER BY name1) as rank
    FROM table1
)
WITH diagonalResults (
    SELECT
         number
        ,CASE WHEN rank = 1 THEN name1 END AS name1
        ,CASE WHEN rank = 2 THEN name1 END AS name2
        ,CASE WHEN rank = 3 THEN name1 END AS name3
        ,CASE WHEN rank = 4 THEN name1 END AS name4
    FROM rankedResults
)
SELECT
     number
    ,MAX(name1) AS name1
    ,MAX(name2) AS name2
    ,MAX(name3) AS name3
    ,MAX(name4) AS name4
FROM diagonalResults
GROUP BY number

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

相关文章:

oracle - Localhost 不将请求转发到 Oracle Docker 容器

sql - 在 Oracle 存储过程中记录错误消息

sql - 如何使用SQL查看表是否存在?

vb.net - 为什么数据表的加载方法有时这么慢?

mysql - 为什么向此 MySQL 查询添加特定的 where 子句会成为性能瓶颈?

mysql - 连接查询以获取与一列中的 2 个值匹配的记录

sql - 仅用sql替换部分

java - ORA-29532 : Java call terminated by uncaught Java exception: java. lang.NoClassDefFoundError

mysql - 搜索带有特定标签的帖子

sql - 使用 jooq 将表名转换为 OID