2015-10-19 59 views
1

前几天我问过类似的问题。Oracle的sql pivot类型按

我有含材料类型的表:

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

一个人并不需要用“支点”在查询中实现想要的转型。几个简单的案例表达式和一组可以做奇迹。

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 
;