2015-10-19 11 views
1

несколько дней назад я задал аналогичный вопрос.Oracle sql pivot columns по типу

У меня есть таблица, содержащая типы материалов:

id type mat_number description  count 
------------------------------------------------  
a mat_1 123456  wood type a  5 
a mat_2 333333  plastic type a  8 
b mat_1 654321  wood type b  7 
c mat_2 444444  plastic type c 11 
d mat_1 121212  wood type z  8 
d mat_2 444444  plastic type c  2 
d mat_2 555555  plastic type d  3 

с SQL Я хочу, чтобы создать список следующим образом:

id mat_1  description  count mat_2  description count 
------------------------------------------------------------------- 
a 123456 wood type a  5  333333 plastic type c 8 
b 654321 wood type b  7  null 
c null        444444 plastic type c 11 
d 121212 plastic type c 8  444444 plastic type c 2 
d null        555555 plastic type c 3 

Это возможно с шарниром?

+1

Пока не полный ответ, http://stackoverflow.com/questions/32828265/rows-to-column-in-oracle#32828478 аналогичный вопрос с кодом, который может быть в состоянии помочь –

+0

Где проблема? что ты уже испробовал? – lad2025

ответ

1

нет, но вы можете сделать это с автообъединением

select a.id aId, a.mat_number mat1, a.description aDescrip, a.count aCount, 
       b.mat_number mat2, b.description aDescrip, b.count bCount 
From table a 
    full join table b 
     on b.id = a.id 
      and a.type = mat_1 
      and b.type = mat_2 
1

One не нужно использовать слово «шарнирный» в запросе, чтобы достичь желаемого преобразования. Несколько простых выражений случая и группа могут творить чудеса.

select 
     id 
    , max(case when type = 'mat_1' then MAT_NUMBER end) as mat_1  
    , max(case when type = 'mat_1' then DESCRIPTION end) as description_1 
    , max(case when type = 'mat_1' then COUNT end) as count_1 
    , max(case when type = 'mat_2' then MAT_NUMBER end) as mat_2 
    , max(case when type = 'mat_2' then DESCRIPTION end) as description_2 
    , max(case when type = 'mat_2' then COUNT end) as count_2 
from table1 
group by 
     id 
order by 
     id 
;