我用SQL查出结果如下
          组装批号         材料批号  材料料号   规格型号             消耗数量
  A10112089-001 1000 262512  0201 1.2nH±0.1nH      3786
A10112089-001 1009 262334  0201 8.2pF±0.1pF      3786
A10112089-001 1010 23019  0201 0.6pF±0.1pF      3786
A10112089-001 1010 23020  0201 0.7pF±0.1pF      3786
A10112089-001 1010 262333  0201 8pF±0.1pF      3786
A10112089-001 1010 262339  0201 15pF±5%      3786
A10112089-001 1010 262881  0201 4.7pF±0.1pF      3786
A10113110-001 1000 262512  0201 1.2nH±0.1nH      3777
A10113110-001 1009 262334  0201 8.2pF±0.1pF      3777
A10113110-001 1010 23019  0201 0.6pF±0.1pF      3777
A10113110-001 1010 23020  0201 0.7pF±0.1pF      3777
A10113110-001 1010 262333  0201 8pF±0.1pF      3777
A10113110-001 1010 262339 0201 15pF±5%      3777
A10113110-001 1010 262881  0201 4.7pF±0.1pF      3778
想实现下面的格式
        组装批号        材料1                                材料2                               材料3.。。
       A10112089-001   1000/262512/0201 1.2nH±0.1nH/3786    1009/262334/0201 8.2pF±0.1pF/3786   。。
       A10113110-001   1000/262512/0201 1.2nH±0.1nH/3777    1009/262334/0201 8.2pF±0.1pF/3777  。。
每个组装批使用材料种类不定,如何实现,请高手帮忙

解决方案 »

  1.   

    不定行转列需要写一个存储过程来进行动态拼接处理。
    下面给一个例子,可参照处理
    第一类:如果K_NAME项目固定,使用DEOCDE函数
    with test as(
     select 3 USER_ID,'背景知识' K_NAME, 4.5 SCORE from dual union all
     select 3 USER_ID,'创新能力' K_NAME, 1.5 SCORE from dual union all
     select 3 USER_ID,'服务意识' K_NAME, 1   SCORE from dual union all
     select 3 USER_ID,'沟通能力' K_NAME, 1   SCORE from dual union all
     select 4 USER_ID,'背景知识' K_NAME, 12  SCORE from dual union all
     select 4 USER_ID,'创新能力' K_NAME, 1.5 SCORE from dual union all
     select 4 USER_ID,'服务意识' K_NAME, 0.5 SCORE from dual union all
     select 4 USER_ID,'沟通能力' K_NAME, 0.5 SCORE from dual)
    SELECT USER_ID,
           SUM(decode(K_NAME, '背景知识', SCORE)) "背景知识",
           SUM(decode(K_NAME, '创新能力', SCORE)) "创新能力",
           SUM(decode(K_NAME, '服务意识', SCORE)) "服务意识",
           SUM(decode(K_NAME, '沟通能力', SCORE)) "沟通能力"
      FROM test
    GROUP BY USER_ID; 
    第二类:如果项数不固定,使用存储过程动态SQL拼接
    表结构如下: 
    t_fl: 
    lb 
    ---- 




    e t_sj 
    id  lb  sl 
    ------------- 
    1  a  10 
    1  c  30 
    1  d  40 
    1  e  50 
    2  b  20 
    2  e  50 想弄出这样一个结果: 
    id  sl_a  sl_b  sl_c  sl_d  sl_e 
    --------------------------------- 
    1    10          30    40    50 
    2          20                50 --1、如果t_fl表行数据不定的话可以写一个存储过程
    CREATE OR REPLACE PROCEDURE row2col(o OUT SYS_REFCURSOR) IS
      sqlstr VARCHAR2(4000) := '';
    BEGIN
      FOR cc IN (SELECT lb FROM t_fl) LOOP
        sqlstr := sqlstr || 'sum(decode(lb,''' || cc.lb ||''',sl)) as "sl_' 
                         || cc.lb || '",';
      END LOOP;
      sqlstr := 'select id,' || rtrim(sqlstr,',') || ' from t_sj group by id';
      OPEN o FOR sqlstr;
    END row2col;
      

  2.   

    11g的?前几天看了个交叉转换的新函数叫什么PIVOT来着,方便,可惜啊,公司的都是10G,
    10G的看楼上的帖子