2015-04-01 63 views
0

我有查询:聚合函数不给总和

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和空基本上这列位,只包含0和1.因此,如果发现0,我将它设为-1000以确定idorder具有0或空作为Freeshipping

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

+0

如果你删除了SUM()和GROUP BY,我怀疑你会发现'idorder' 350184和350185的多行,这两行的'ama.FreeShipping'都是'1'。你总结了这些多行,并在这里以'2'结尾。 – JNevill 2015-04-01 15:04:25

+0

也许我错过了一些东西,但是如果ama.freeshipping!= 0意味着没有零,所以case语句是毫无价值的,因为你永远不会有零。 – xQbert 2015-04-01 15:05:10

回答

1

该表达式的where子句中:

AND ama.FreeShiping != 0 

只选择其为 “1” 的值。如果您想查看其他值,请将其删除。

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