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

问个交叉表的问题

查询语句如下   :

select   productno   as   货号,color   as   颜色,sum(case   sizename   when   '110 '   then   num   else   0   end   )   as   '110 ',
sum(case   sizename   when     '120 '   then   num   else   0   end   )   as   '120 ',
sum(case   sizename   when   '130 '   then   num   else   0   end   )   as   '130 '
from   tbproductinout   group   by   productno,color

货号       颜色     110         120           130  
714         红           100           0               0
715         红           50             0               0
714         黑             200           100             100
715         黑             60             80         80

问题   :
1.   我想按照下面的显示应该怎么做
2.   像这样case   sizename   when   '110 '     我要把所有的   sizename都写一遍,我只想取出该表中有的sizename进行统计,而不是固定的,或者我的sizename是另一张表的数据,
应该怎么实现?

货号       颜色     110         120           130  
714         红           100           0               0
714         黑           200           100         100
715         红             50           0             0
715         黑             60             80         80



------解决方案--------------------
1、显示的列表直接在程序中处理,使用DataView就行;
2、如果你不是每一种型号都需要就要建立一个表来对应产品和型号之间的关系,可是这样也不是一定能够解决你的问题;毕竟没有对应和0还是两个概念;
------解决方案--------------------
--如果sizename是從當前表
Declare @S Varchar(8000)
Select @S = 'select productno as 货号,color as 颜色 '
Select @S = @S + ',sum(case sizename when ' ' ' + sizename + ' ' ' then num else 0 end ) as [ ' + sizename + '] '
From tbproductinout Group By sizename
Select @S = @S + ' from tbproductinout group by productno,color '
EXEC(@S)