CREATE TABLE ORDER_INFO1
(
       order_code VARCHAR2(20),
       order_type VARCHAR2(10), --类别只有 A 、B 、F - (A 、B 每个 order_code 只有一个,F 每个 order_code 可有多个 )
       order_fee1 NUMBER,
       order_fee2 NUMBER,
       order_date VARCHAR2(10)
);
INSERT INTO ORDER_INFO1 
SELECT '铅笔', 'F', 10, 20, 'CC-201310' FROM DUAL UNION ALL 
SELECT '铅笔', 'F', 10, 20, 'CC-201311' FROM DUAL UNION ALL 
SELECT '铅笔', 'A', 10, 20, 'CC-' FROM DUAL UNION ALL 
SELECT '铅笔', 'B', 10, 20, 'CC-' FROM DUAL UNION ALL 
SELECT '水笔', 'F', 10, 20, 'CC-201310' FROM DUAL UNION ALL 
SELECT '水笔', 'F', 10, 20, 'CC-201311' FROM DUAL UNION ALL 
SELECT '水笔', 'B', 10, 20, 'CC-' FROM DUAL UNION ALL 
SELECT '水笔', 'A', 10, 20, 'CC-' FROM DUAL;
/*
要得到的结果:
ORDER_CODE        FEE                     A         B           201310                201311
铅笔                      order_fee1          10        10         10                       10
铅笔                      order_fee2          20        20         20                       20
水笔                      order_fee1          10        10         10                       10
水笔                      order_fee2          20        20         20                       20
或者这种结果也可以
ORDER_CODE                  A         B           201310                201311
铅笔                                30        30         30                       30
水笔                                30        30         30                       30
*/oracleselect

解决方案 »

  1.   

    可以使用decode或者case when来转行,不知道9i里面支持不?
      

  2.   

    行列转化就是case when 和decode的经典用法
      

  3.   

    case when XX then X end,
    case when XX then X end
      

  4.   

    SELECT ORDER_CODE,MAX(DECODE(ORDER_TYPE,'A',order_fee1+order_fee2,NULL)) AS A,
    MAX(DECODE(ORDER_TYPE,'B',order_fee1+order_fee2,NULL)) AS B,
    MAX(DECODE(ORDER_DATE,'CC-201310',order_fee1+order_fee2,NULL)) AS "CC-201310",
    MAX(DECODE(ORDER_DATE,'CC-201311',order_fee1+order_fee2,NULL)) AS "CC-201311"
     FROM ORDER_INFO1 GROUP BY ORDER_CODE
    --如果order_date是变化的,就要实时做动态SQL
      

  5.   

    动态sql 申明2个CURSOR 来循环累加每个类别