TSQL基于双ID值对值求和

时间:2014-11-12 08:33:27

标签: sql-server tsql

这是一个小的简化剪辑我的数据

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 = 3ItemID 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

因此,如果此解决方案无法使用以下答案

3 个答案:

答案 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