我现在有一个这样的问题:
我有数据如下:
货号   条码   品名   门店  库存
00001  20001  挂钩   2001  34
00001  20001  挂钩   2002  35
00001  20001  挂钩   2003  36
00001  20001  挂钩   2003  37

我要转换成如下数据:
货号   条码   品名   门店1  库存1  门店2  库存2   门店3  库存3   门店4  库存4 ......
00001  20001  挂钩   2001   34     2002   35      2003    36     2003   37    ......
请各位大吓,帮一下小弟。
在线等候各位大吓的回复,谢谢!

解决方案 »

  1.   

             
    with t1 as
    (
    select '00001' 货号,  '20001' 条码, '挂钩' 品名,  '2001' 门店, 34 库存 from dual union all
    select '00001' 货号,  '20001' 条码, '挂钩' 品名,  '2002' 门店, 35 库存 from dual union all
    select '00001' 货号,  '20001' 条码, '挂钩' 品名,  '2003' 门店, 36 库存 from dual union all
    select '00001' 货号,  '20001' 条码, '挂钩' 品名,  '2004' 门店, 37 库存 from dual
    )
    select 货号,条码,品名,
       max(case when 门店 = '2001' then 门店 else null end) 门店1,
       sum(case when 门店 = '2001' then 库存 else null end) 库存1,
       max(case when 门店 = '2002' then 门店 else null end) 门店2,
       sum(case when 门店 = '2002' then 库存 else null end) 库存2,
       max(case when 门店 = '2003' then 门店 else null end) 门店3,
       sum(case when 门店 = '2003' then 库存 else null end) 库存3,
       max(case when 门店 = '2004' then 门店 else null end) 门店4,
       sum(case when 门店 = '2004' then 库存 else null end) 库存4
    from t1
    group by 货号,条码,品名
       
      

  2.   

    列数不固定就要写存储过程了
    可以使用一个循环拼接一个SQL语句然后动态执行即可!!
    论坛上很多,也可参考我以前的回贴
    http://topic.csdn.net/u/20100127/17/3a4e1c22-1946-465b-a0c2-a693de23383a.html
      

  3.   

    感谢各位的回复试。
    列数是不固定的。
    我也试着写了一下,但不太完善。
    select 货号,
    MAX(decode(rn1, 1, 门店, NULL)) str_no1,
    MAX(decode(rn, 1, 库存, NULL)) num1,
    MAX(decode(rn1, 2, 门店, NULL)) str_no2,
    MAX(decode(rn, 2, 库存, NULL)) num2,
    MAX(decode(rn1, 3, 门店, NULL)) str_no3,
    MAX(decode(rn, 3, 库存, NULL)) num3,
    MAX(decode(rn1, 4, 门店, NULL)) str_no4,
    MAX(decode(rn, 4, 库存, NULL)) num4

    --由于这里的“门店”是不固定的,所以????from (
    select 货号,门店,row_number() over(PARTITION BY plu_no ORDER BY 门店) AS rn1,
           库存,row_number() over(PARTITION BY plu_no ORDER BY 库存) AS rn from U_RS_INVENTORY where str_no in (
    select 门店 from str_group_temp where str_group = 门店组1
    ))
    GROUP BY 货号
    ORDER BY 1