我需要编写一条 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/