我算算某些案件總量。如何在我的SQL Server場景中使用CASE?
#customerSales
表:
ItemLookupCode TotalQuantity
-----------------------------
111A000 20
111B001 320
111D000 5
111D001 5
111D002 1
111D003 1
#temp_ItemRelations
臺
ID ItemLookupCode ChildItemLookupCode1 Child1Piece ChildItemLookupCode2 Child2Piece ChildItemLookupCode Child3Piece
---------------------------------------------------------------------------------------------------------------
352 111A000 111A001 5 111A002 3 NULL NULL
365 111B000 111B001 4 NULL NULL NULL NULL
377 111C000 111C001 10 111C002 5 111C003 1
412 111D000 111D001 12 111D002 8 111D003 4
601 111E000 111E001 16 111E002 6 111E003 1
你可以看到ItemLookupCode
111D000在#temp_ItemRelations
,所有兒童都賣,包括父母。
所以輸出應該像下面
ItemLookupCode TotalQuantity //parent + child1 + child2 + child3
111D000 77 // 5 + (5*12) + (1*8) + (1*4)
111A000 20 // 20 + no child
111B000 1280 // noparent + (4*320)+ nochild2 & 3
我嘗試下面的查詢。但我不怎麼總結這些價值。我知道以下查詢是錯誤的。但我試過了。
SELECT
ir.ItemLookupCode,
(CASE
WHEN cs.ItemLookupCode = ir.ItemLookupCode
THEN cs.TotalQuantity
WHEN cs.itemlookupcode = ir1.childitemlookupcode1
THEN (cs.TotalQuantity * ir.Child1Piece)
WHEN cs.itemlookupcode = ir2.childitemlookupcode2
THEN (cs.TotalQuantity * ir.Child2Piece)
WHEN cs.itemlookupcode = ir3.childitemlookupcode
THEN (cs.TotalQuantity * ir.Child3Piece)
ELSE 0
END) AS TotalQuantity
FROM
#temp_ItemRelations ir
LEFT JOIN
#customerSales cs ON cs.itemlookupcode = ir.itemlookupcode
LEFT JOIN
#temp_ItemRelations ir1 ON cs.itemlookupcode = ir1.childitemlookupcode1
LEFT JOIN
#temp_ItemRelations ir2 ON cs.itemlookupcode = ir2.childitemlookupcode2
LEFT JOIN
#temp_ItemRelations ir3 ON cs.itemlookupcode = ir3.childitemlookupcode
你能告訴我什麼是'coalesce'爲什麼你每coalesce'添加'零? –
'coalesce'返回從提供給它的參數列表中的第一個非空參數。在上面的代碼中,coalesce(cs.TotalQuantity,0)'等於'cs.TotalQuantity'(如果不爲null),否則爲0。由於將0添加到某個內容並不會改變總和,因此它就像一個方便的if或case。 –
@mohamedfaiz。 。 。如果該值爲「NULL」,則將其視爲「0」。這可以防止表達式返回NULL,因爲其中一個操作數是NULL。 –