我必须在某些情况下计算总数量。
#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
中看到#temp_ItemRelations
的 111D000 ,所有儿童都已售出,包括父母。
所以输出应该如下所示
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
答案 0 :(得分:4)
您的数据结构不正确。您的项目关系应该与每个子关系有一行,而不是多个带有数字的列来区分它们。
我根本不会使用case
进行此计算,只需coalesce()
。更重要的是,您似乎有错误表格的连接:
select ir.ItemLookupCode,
(coalesce(cs.TotalQuantity, 0) +
coalesce(cs1.TotalQuantity * ir.Child1Piece, 0) +
coalesce(cs2.TotalQuantity * ir.Child2Piece, 0) +
coalesce(cs3.TotalQuantity * ir.Child3Piece, 0)
) as TotalQuantity
from #temp_ItemRelations ir left join
#customerSales cs
on cs.itemlookupcode = ir.itemlookupcode left join
#customerSales cs1
on cs1.itemlookupcode = ir.childitemlookupcode1 left join
#customerSales cs2
on cs2.itemlookupcode = ir.childitemlookupcode2 left join
#customerSales cs3
on cs3.itemlookupcode = ir.childitemlookupcode3;
答案 1 :(得分:0)
当你这样做时
CASE WHEN condition1 THEN expression1 当条件2那么表达2 ... 强>
这意味着当condition1为TRUE时,结果将为expression1。 当condition1为FALSE时,只会检查condition2。