聚合函数不给总和

时间:2015-04-01 14:58:01

标签: sql sql-server-2008

我有疑问:

SELECT o.idorder,
    sum(CASE 
            WHEN cast(isnull(ama.FreeShiping, 0) AS INT) = 0
                THEN - 1000
            ELSE cast(isnull(ama.FreeShiping, 0) AS INT)
            END) FreeShiping
FROM OrderDetail od,
    amazonsku ama,
    orders o,
    TempPrintRecords tmp
WHERE o.idOrder = od.idOrder
    AND o.idCustomer = ama.idCustomer
    AND od.SKU = ama.Sku
    --and od.idOrder=350184
    AND od.idOrder = tmp.idOrder
    AND ama.FreeShiping != 0
GROUP BY o.idorder

结果:

enter image description here

这里我在ama.FreeShiping

中有0和null

基本上这个列是位,只包含0和1.所以如果找到0,我将它设为-1000,以识别{0}为0 {0}或为idorder

但它没有给出适当的总和,它应该为每列提供-ve的结果。

1 个答案:

答案 0 :(得分:1)

where子句中的此表达式:

AND ama.FreeShiping != 0

仅选择“1”的值。如果要查看其他值,请将其删除。

您还应该学会使用正确的join语法。如果您使用了join关键字,那么大部分条件都会出现在on条款中,并且此where条件可能更容易被发现。