2016-08-20 49 views
-1

我有2個表:的Sql SUM當值時=是

  • Order作爲主表中的列訂單ID,金額,日期,客戶,金額

  • OrderDetails與子表列Id,OrderID,項目,狀態布爾(是或否),價格,數量,小計。

我想總結小計僅如果狀態是YES,那麼顯示的總和在主「金額」欄

SELECT 
    Order.OrderId, Order.Date, Order.Customer, Order.Amount, 
    SUM(OrderDetails.SubTotal) AS TotalAmount, 
FROM 
    Order 
INNER JOIN 
    OrderDetails ON Order.OrderId = OrderDetails.OrderId  
WHERE 
    (OrderId.status = Yes) 
GROUP BY 
    Order.OrderId, Order.Date, Order.Customer, Order.Amount 

這個SQL語句只返回行,其中列Status是「是的「,但我想返回所有這些,但SUM只有Status = Yes的行。

例子:

OrderDetails

Order-Id item Price Quantity SubTotal Status 
------------------------------------------------------- 
M1   Shirt 10  10   100  yes 
M1   item2 5  5   25  no 
M2   Item3 7  5   35  yes 

Order

order-Id date   Cus   Amount 
------------------------------------------------ 
M1   2016/8/20  Jean-Claude  100 
M2   2016/8/20  Pierre   35 

謝謝

回答

0

你似乎想是這樣的:

SELECT o.OrderId, o.Date, o.Customer, o.Amount, 
     SUM(CASE WHEN od.status = 'YES' THEN od.SubTotal ELSE 0 END)) AS TotalAmount 
FROM Order o INNER JOIN 
    Orderdetails od 
    ON o.OrderId = od.OrderId 
GROUP BY o.OrderId, o.Date, o.Customer, o.Amount; 

關鍵是有條件的聚合 - 將CASE表達式作爲參數SUM()

+0

注 - 如果您使用的是SQL 2012或更高版本,則可以使用'iif'函數代替'case'語句 – iliketocode

+0

@iliketocode。 。 。絕對沒有理由使用'iif()'。這是爲了與MS Access的後向兼容而添加的不必要的功能。 CASE是ANSI標準,幾乎可以在所有數據庫中使用。 –