[英]SQL Server: subtract or sum between rows in the same column then update the results
[英]Subtract 2 rows in the same column in SQL Server
我想弄清楚如何從同一列中減去兩個行值。 示例: 250-161= 89
和20-20 = 0
BrokenQuantityAdjustment
------------------------
-161.00
-89.00
250.00
-20.00
20.00
到目前為止,這是我的查詢:
SELECT DISTINCT
a.SiteID, a.SiteDescription, iv.VendorNumber, iv.VendorName,
i.StockNumber, i.StockDescription, mrh.DateReceived, mrh.InvoiceDate,
mrh.InvoiceNumber, mrh.DocumentNumber, mrh.ReceivingComment,
ia.UnitsPerPack, mri.BrokenQuantityAdjusted,
ia.BrokenQuantityAdjustment, ia.BasePackCost, ia.Fee
FROM
AdmSites AS a
INNER JOIN
InvManualReceivingHeader AS mrh ON a.AdmSiteID = mrh.AdmSiteId
INNER JOIN
InvAdjustments AS ia ON a.AdmSiteID = ia.AdmSiteID
AND mrh.DateReceived = ia.AdjustmentDate
AND mrh.InvoiceNumber = ia.InvoiceNumber
INNER JOIN
InvItems AS i ON ia.InvItemID = i.InvItemID
INNER JOIN
InvVendors AS iv ON ia.InvVendorID = iv.InvVendorID
INNER JOIN
InvManualReceivingItemsAdjustments AS ria ON mrh.DateReceived = ria.DateReceived
CROSS JOIN
InvManualReceivingItems AS mri
WHERE
(mrh.InvoiceNumber = 'deleted')
我的結果應該是針對此列的:
BrokenQuantityAdjustment
--------------------------
89
-89
0
我不確定如何獲得這些結果
從您的快照和描述來看,我認為您可以使用sum
和group by
來實現。
CREATE TABLE T(
BrokenQuantityAdjustment int,
BasePackCost float
);
insert into t values (-161.00,0.1615)
insert into t values (-89.00,0.1618)
insert into t values (250.00,0.1615)
insert into t values (-20.00,0.1616)
insert into t values (20.00,0.1616)
查詢 1 :
SELECT SUM(BrokenQuantityAdjustment)result
FROM T
GROUP BY BasePackCost
結果:
| result |
|--------|
| 89 |
| 0 |
| -89 |
你可以試試這個
;with cte as(
SELECT DISTINCT
a.SiteID,
a.SiteDescription,
iv.VendorNumber,
iv.VendorName,
i.StockNumber,
i.StockDescription, mrh.DateReceived, mrh.InvoiceDate,
mrh.InvoiceNumber,
mrh.DocumentNumber, mrh.ReceivingComment,
ia.UnitsPerPack,
mri.BrokenQuantityAdjusted,
ia.BrokenQuantityAdjustment,
ia.BasePackCost,
ia.Fee
FROM
AdmSites AS a
INNER JOIN
InvManualReceivingHeader AS mrh ON a.AdmSiteID = mrh.AdmSiteId
INNER JOIN
InvAdjustments AS ia ON a.AdmSiteID = ia.AdmSiteID
AND mrh.DateReceived = ia.AdjustmentDate
AND mrh.InvoiceNumber = ia.InvoiceNumber
INNER JOIN
InvItems AS i ON ia.InvItemID = i.InvItemID
INNER JOIN
InvVendors AS iv ON ia.InvVendorID = iv.InvVendorID
INNER JOIN
InvManualReceivingItemsAdjustments AS ria ON mrh.DateReceived = ria.DateReceived
CROSS JOIN
InvManualReceivingItems AS mri
WHERE
(mrh.InvoiceNumber = 'deleted')
)
select t1.*,t2.result
from cte t1 inner join (
SELECT SUM(BrokenQuantityAdjustment)result,BasePackCost
FROM cte
GROUP BY BasePackCost
) t2 on t1.BasePackCost = t2.BasePackCost
使用SUM的窗函數怎么樣?
例如替換:
ia.BrokenQuantityAdjustment
通過帶有分區的 SUM OVER:
SUM(ia.BrokenQuantityAdjustment) OVER (PARTITION BY ia.BasePackCost, a.SiteID, a.AdmSiteID, ia.AdjustmentDate, ia.InvoiceNumber, ia.BasePackCost) AS BrokenQuantityAdjustment
雖然不太確定哪些列應該在分區中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.