Sql server TSQL求和基于双ID值的值
这是我的数据的一小部分简化片段Sql server TSQL求和基于双ID值的值,sql-server,tsql,Sql Server,Tsql,这是我的数据的一小部分简化片段 OrderID QTY ItemID ActualQTY(does not exist in database) 1 2 1 2 1 2 3 1 1 4 5 3 现在我需要一个查询,它将根据ItemID的填充ActualQTY。因此,将itemid1=3和itemid2=1的总数量相加,最后将itemid3=5 应该是这样的 OrderID QTY ItemI
OrderID QTY ItemID ActualQTY(does not exist in database)
1 2 1
2 1 2
3 1 1
4 5 3
现在我需要一个查询,它将根据ItemID的
填充ActualQTY
。因此,将itemid1=3
和itemid2=1
的总数量相加,最后将itemid3=5
应该是这样的
OrderID QTY ItemID ActualQTY
1 2 1 3
2 1 2 1
3 1 1 3
4 5 3 5
问题是我是TSQL新手,我想不出一个好的方法来实现这一点
--编辑--
其他人帮我解决了这个问题,并给出了这个对我来说似乎是最有效的解决方案。但是,如果需要将它们应用于VisualStudio中的XSD文件,则此解决方案不起作用。因此,我将其转换为服务器上的表值函数
SELECT OrderID, QTY, ItemID, SUM(QTY) OVER(PARTITION BY ItemID) AS ActualQTY
因此,如果此解决方案不起作用,请求助于下面的答案,您可以这样做:
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
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;
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
但是,如果要更新列
ActualQTY
值,而不仅仅是选择,可以执行以下操作:
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;
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