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

一个汇总查询的小问题
出库总表
出库单序号  店面编号  客户编号  出库日期              库管编号  是否冲销
1          1        1        YYYY-MM-DD HH:MM:SS  1        1
N          N        N        YYYY-MM-DD HH:MM:SS  N        0
------------------------------
出库明细表
出库单序号  商品编号  结算方式  出库量  结算量
1          1        现金      1      1
N          N        卡付      N      N
------------------------------
输出下面这种结果集:
店面编号 客户编号  商品编号  出库量  现金结算量  卡付结算量

我用下面这两段简单语句测试了一下

SELECT 出库总表.店面编号 店面编号,
       出库明细表.商品编号 商品编号,
       SUM(CASE 结算方式 WHEN '现金' THEN 1 ELSE 0 END) AS 现金结算量
FROM  出库总表,出库明细表
WHERE 出库总表.出库单序号 = 出库明细表.出库单序号 AND
      出库总表.是否冲销 = 0 AND
      出库总表.门店编号 = 1 AND
      出库明细表.商品编号 = 1 AND
      (出库总表.出库日期 BETWEEN '2012-1-1 0:00:00' AND '2012-12-31 23:59:59')
GROUP BY 出库总表.店面编号,
         出库明细表.商品编号



SELECT 出库总表.店面编号 店面编号,
       出库明细表.商品编号 商品编号,
       SUM(出库明细表.出库量) AS 现金结算量
FROM   出库总表,出库明细表
WHERE  出库总表.出库单序号 = 出库明细表.出库单序号 AND
       出库总表.是否冲销 = 0 AND
       出库总表.门店编号 = 1 AND
       出库明细表.商品编号 =1 and
       出库明细表.结算方式 = '现金'1 AND
       (出库总表.业务日期 BETWEEN '2012-1-1 0:00:00' AND '2012-12-31 23:59:59')
GROUP BY 出库总表.店面编号,
         出库明细表.商品编号

,首先,第一段得到的SUM结果肯定不对,但我不了解哪里不对;
其次,两段语句条件相同,SUM的结果却不一样,不知道它们的区别在哪里?
CASE SUM 行转列

------解决方案--------------------
SUM(CASE 结算方式 WHEN '现金' THEN 1 ELSE 0 END) AS 现金结算量
应该改成
SUM(CASE 结算方式 WHEN '现金' THEN 出库明细表.出库量 ELSE 0 END) AS 现金结算量
然后时间条件上,如果是标准时间格式的话,应该写'2012-01-01 00:00:00'
------解决方案--------------------
then 1的话,就变成了sum(1),1是常量,那么sum这组值就是1+1+1+...1
then 出库明细表.出库量,这是个列,那么sum这组值就是每一行的出库明细表.出库量相加
这么说不知道解释的清楚不呵呵