日期:2014-05-17  浏览次数:20575 次

求借助另一个表进行 行转列的sql语句
一个小超市把很多商品分成了几个大类 ,例如生鲜类 粮油类 日杂类 糕点类 文具类
有一个表a
类别id 类别名称
1      生鲜类
2      粮油类
3      日杂类
4      糕点类
5      文具类
.......
每天要卖很多商品,商品有具体的名字 ,但都属于某一类
有个销售记录表
表b
纪录id   销售日期   类别名称  商品名称 价格
1         20130701  文具类  铅笔     10.00
2         20130701  文具类  橡皮     25.00
3         20130701  生鲜类  猪肉     5.50
4         20130702  文具类  尺子     3.20
。。。。。。

用户需要取某个时间段内每天的各种大类别的销售量,时间段由用户选择
如果从销售记录表进行行转列
是能够统计出结果的
但结果是如下这样
日期 生鲜类 文具类 合计
20130701 1   2   3
20130702 0   1   1
也就是如果时间段内某一类商品一个也没销售出去,那统计出来的结果就没有这个类别
我想用到类别表,让所有的类别都显示出来,如果没销售就是0 这个sql该如何写呢

也就是需要得到如下结果
日期 生鲜类 粮油类 日杂类 糕点类 文具类 合计
20130701 1   0    0   0   2   3
20130702 0   0    0   0   1   1

------解决方案--------------------
declare @sql varchar(8000)

select @sql = isnull(@sql + '],[' , '') + 类别名称 from (SELECT  T.类别名称 ,
        T.销售日期 ,
        SUM(CASE WHEN 价格 IS NULL THEN 0
                 ELSE 1
            END) AS num
FROM    ( SELECT    TBA.类别名称 ,
                    TBB.销售日期