日期:2014-05-18  浏览次数:20511 次

求教高手一条高难度SQL语句
表1
PO   ITEM_NO   QTY   DEST_NAME   _120   _125   _130   ...   _330   _XO
11       22           30         AAAA         0           0         15             15       0
11       22           45         BBBB         0           10       20             10       0
11       22           15         DDDD         0             0         0               0     15
字段中_120   _125   _XO等是鞋子的尺寸(有很多的尺寸,这里简写了)
转化成表2
PO   ITEM_NO   QTY     SIZE   AAAA   BBBB     CCCC     DDDD
11       22           30     _125     15         0         0             0
11       22           30     _330     15         0         0             0
11       22           45     _125       0       10         0             0
11       22           45     _130       0       20         0             0
11       22           45     _330       0       10         0             0
11       22           15     _XO         0       10         0           15
没有数量的鞋子尺寸不会出现在表2里,同时会列出所有的订货商.
烦请高手帮忙看下,小弟在此感激万分!

------解决方案--------------------
select PO, ITEM_NO, QTY,SIZE = '_120 ',
max(case when DEST_NAME = 'AAAA ' then _120 else 0 end) 'AAAA ',
max(case when DEST_NAME = 'bbbb ' then _120 else 0 end) 'bbbb ',
max(case when DEST_NAME = 'cccc ' then _120 else 0 end) 'cccc ',
max(case when DEST_NAME = 'dddd ' then _120 else 0 end) 'dddd '
from tb group by PO, ITEM_NO, QTY
union all
select PO, ITEM_NO, QTY,SIZE = '_125 ',
max(case when DEST_NAME = 'AAAA ' then _125 else 0 end) 'AAAA ',
max(case when DEST_NAME = 'bbbb ' then _125 else 0 end) 'bbbb ',
max(case when DEST_NAME = 'cccc ' then _125 else 0 end) 'cccc ',
max(case when DEST_NAME = 'dddd ' then _125 else 0 end) 'dddd '
from tb group by PO, ITEM_NO, QTY
..............
union all
select PO, ITEM_NO, QTY,SIZE = '_XO ',
max(case when DEST_NAME = 'AAAA ' then _XO else 0 end) 'AAAA ',
max(case when DEST_NAME = 'bbbb ' then _XO else 0 end) 'bbbb ',
max(case when DEST_NAME =