问个交叉表的问题
查询语句如下 :
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)