日期:2014-05-17  浏览次数:20926 次

动态的行列转换
  select  b.depemp_id 部门ID, a.zc_id 职称ID, nvl(count(case when(a.zc_id=b.zcemp_id) then  1 end),0) 人数  
    
     from abc_zc0000 a, abc_emp000 b  
     where 1=1   
   
   group by a.zc_id, b.depemp_id 
    order by b.depemp_id, a.zc_id




如图,想把形式改为 
部门ID  职称ID1  职称ID2    职称ID3   职称ID4   职称ID5
   1          0     1        1              0         0
   2          .
这样的形式,其中部门与职称都是动态的

还有对于group by的不显示Null也是非常纠结,用nvl不行,查了下说是要用外连接?

希望大家能帮帮忙
SQL 行列转换

------解决方案--------------------
11G 可以考虑用PIVOT
http://www.cnblogs.com/zlja/archive/2011/12/10/2449515.html

------解决方案--------------------
部门与职称都是动态的话,一个sql根本搞不定的。

需要用存储过程。。

7、动态行转不定列
----------------新建测试表
CREATE TABLE TEST(
    WL VARCHAR2(10),
    XYSL INTEGER,
    XYCK VARCHAR2(10),
    XCLCK VARCHAR2(10),
    XCLCKSL INTEGER,
    PC INTEGER
);

----------------第一部分测试数据
INSERT INTO TEST VALUES('A1', 2, 'C1', 'C1' ,  20, 123); 
INSERT INTO TEST VALUES('A1', 2, 'C1', 'C2' ,  30, 111); 
INSERT INTO TEST VALUES('A1', 2, 'C1', 'C2' ,  20, 222); 
INSERT INTO TEST VALUES('A1', 2, 'C1', 'C3' ,  10, 211);