Вычтите 2 строки в одном столбце в SQL Server - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь выяснить, как вычесть два значения строки из одного столбца. Пример: 250-161= 89 и 20-20 = 0

QueryExample

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

Я не уверен, как получить эти результаты

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Как насчет использования оконной функции SUM?

Например, заменить:

ia.BrokenQuantityAdjustment

По сумме с разделением:

SUM(ia.BrokenQuantityAdjustment) OVER (PARTITION BY ia.BasePackCost, a.SiteID, a.AdmSiteID, ia.AdjustmentDate, ia.InvoiceNumber, ia.BasePackCost) AS BrokenQuantityAdjustment

Не слишком уверен, какие столбцы должны быть в разделе.

0 голосов
/ 27 августа 2018

Из ваших снимков и описания, я думаю, вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...