这是一个小的简化剪辑我的数据
OrderID QTY ItemID ActualQTY(does not exist in database)
1 2 1
2 1 2
3 1 1
4 5 3
现在我需要一个基于ActualQTY
填写ItemID's
的查询。因此总结ItemID 1 = 3
和ItemID 2 = 1
以及ItemID 3 = 5
看起来应该是这样的
OrderID QTY ItemID ActualQTY
1 2 1 3
2 1 2 1
3 1 1 3
4 5 3 5
问题是我是TSQL的新手,我无法找到一个很好的方法来做到这一点。
- 编辑 -
其他人帮我解决了这个问题并提供了这个解决方案,这对我来说似乎是最有效的解决方案。但是,如果您需要将它们应用于Visual Studio中的XSD文件,则此解决方案不起作用。所以我把它变成了服务器上的表值函数。
SELECT OrderID, QTY, ItemID, SUM(QTY) OVER(PARTITION BY ItemID) AS ActualQTY
因此,如果此解决方案无法使用以下答案
答案 0 :(得分:0)
SELECT b.OrderID,
b.QTY,
b.ItemID,
a.total_sum AS ActualQTY
FROM (SELECT ItemID,
Sum(QTY) AS total_sum
FROM tablename
GROUP BY ItemID) AS a
INNER JOIN tablename b
ON a.ItemID = b.ItemID
答案 1 :(得分:0)
你可以这样做:
SELECT
t2.OrderID,
t2.QTY,
t2.ItemID,
t1.ActualQTY
FROM
(
SELECT
ItemId,
SUM(QTY) AS ActualQTY
FROM tablename AS t1
GROUP BY ItemId
) AS t1
INNER JOIN tablename AS t2 ON t1.ItemId = t2.ItemID;
但是如果你想更新列ActualQTY
值,而不仅仅是选择,你可以这样做:
UPDATE t1
SET t1.ActualQTY = t2.ActualQTY
FROM tablename AS t1
INNER JOIN
(
SELECT
ItemId,
SUM(QTY) AS ActualQTY
FROM tablename AS t1
GROUP BY ItemId
) AS t2 ON t1.ItemID = t2.ItemID
答案 2 :(得分:0)
Select t.orderid, t.qty, t.itemid, a.actualq as actualqty
From yourtable t join (
Select sum(qty) as actualq, itemid
From yourtable
Group by itemid) a
On t.itemid = a.itemid