Oracle sql pivot列的类型

时间:2015-10-19 12:33:30

标签: sql oracle 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

这可以用枢轴吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

一个人不需要使用" pivot"在查询中实现想要的转换。一些简单的案例表达式和一个分组可以创造奇迹。

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
;