2015-04-01 92 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條件可能更容易被發現。