簡體   English   中英

在 SQL Server 中減去同一列中的 2 行

[英]Subtract 2 rows in the same column in SQL Server

我想弄清楚如何從同一列中減去兩個行值。 示例: 250-161= 8920-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

我不確定如何獲得這些結果

從您的快照和描述來看,我認為您可以使用sumgroup 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.

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