2016-06-16 3 views
2

мне нужно написать заявление Oracle SQL, которые преобразуют table1 в TABLE2Oracle SQL из строк в столбцах

 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, но это не дает мне одну колонку

+1

Google: 'Oracle стержень column' – sagi

+1

пожалуйста, напишите то, что вы пробовали. Это, похоже, не является стандартным стержнем. –

ответ

5

Если вас» используя динамический 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 
+0

спасибо, но столбец Oracle pivot помог много, и у них лучше preformace –

Смежные вопросы