簡體   English   中英

如何基於另一列在一列中累積SQL中的值?

[英]how to accumulate values in SQL in one column based on another column?

我試圖在下面的第一個表中累積結果,其中包含基於第二個表中的數量和乘數的不同ItemID 我試過UPDATE記錄和

SET ItemCount = ItemCount + ((SELECT [Multiplier] FROM Table2 WHERE Table1.[ItemID] = Table2.[Item1ID]) * (SELECT [Item1Qty] FROM Table2 WHERE Table1.[ItemID] = Table2.[Item1ID])) + ((SELECT [Multiplier] FROM Table2 WHERE Table1.[ItemID] = Table2.[Item2ID]) * (SELECT [Item2Qty] FROM Table2 WHERE Table1.[ItemID] = Table2.[Item2ID]))

但這失敗了,因為SELECT語句返回多個值。 獲得表3中顯示結果的最有效方法是什么

ItemID      ItemCount
10001
10002
10003
10004

Item1ID     Item1Qty        Item2ID     Item2Qty     Multiplier
10001       1               10003        3            4
10004       3               10002        5            2
10003       3               10001        4            3

ItemID      ItemCount
10001       16
10002       10
10003       21
10004       6

一種方法是使用union all來計算每個項目的總數量。 然后更新table1

with cte as (
    select
        itemID, totalQty = sum(qty)
    from (
        select itemID, qty = item1Qty * Multiplier from table2
        union all select itemID, item2Qty * Multiplier from table2
    ) t
    group by itemID
)

update a
set b.ItemCount = b.qty
from
    table1 a
    join cte b on a.itemID = b.itemID

這將有效:

Declare @Table as Table (Item1ID varchar(10),Item1Qty int,Item2ID varchar(10),Item2Qty int,Multiplier int)
Insert into @Table Values
('10001',1,'10003',3,4),
('10004',3,'10002',5,2),
('10003',3,'10001',4,3)

Declare @Table1 as Table (Item1ID varchar(10),ItemCount int)
Insert into @Table1 Values
('10001',NULL),
('10002',NULL),
('10003',NULL),
('10004',NULL)

;With T AS
(
Select Item1ID,Item1Qty,Multiplier from @Table
UNION
Select Item2ID,Item2Qty,Multiplier from @Table
)

Update T set T.ItemCount = S.ItemCount from @Table1 T
Inner Join (
Select Item1ID,SUM(Item1Qty*Multiplier) 'ItemCount' from T
Group by Item1ID
) S on S.Item1ID = T.Item1ID

工作樣本

UPDATE T3
SET T3.ItemCount = ISNULL(T3.ItemCount,0) + ((T2.Multiplier * T1.Item1Qty) + (T2.Multiplier * T2.Item2Qty))
FROM Table3 T3
INNER JOIN Table1 AS T1 ON T1.Item1ID = T3.ItemID
INNER JOIN Table2 AS T2 On T2.Item2ID = T1.Item1ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM