简体   繁体   中英

Getting the difference between two Select queries

So I'm stuck with this sql query,

select YEAR(docdate),
    sum(case when MONTH(DocDate) = 1 then DeliveredQty else 0 end) as January,
    sum(case when MONTH(DocDate) = 2 then DeliveredQty else 0 end) as February,
    sum(case when MONTH(DocDate) = 3 then DeliveredQty else 0 end) as March,
    sum(case when MONTH(DocDate) = 4 then DeliveredQty else 0 end) as April,
    sum(case when MONTH(DocDate) = 5 then DeliveredQty else 0 end) as May,
    sum(case when MONTH(DocDate) = 6 then DeliveredQty else 0 end) as June,
    sum(case when MONTH(DocDate) = 7 then DeliveredQty else 0 end) as July,
    sum(case when MONTH(DocDate) = 8 then DeliveredQty else 0 end) as August,
    sum(case when MONTH(DocDate) = 9 then DeliveredQty else 0 end) as September,
    sum(case when MONTH(DocDate) = 10 then DeliveredQty else 0 end) as October,
    sum(case when MONTH(DocDate) = 11 then DeliveredQty else 0 end) as November,
    sum(case when MONTH(DocDate) = 12 then DeliveredQty else 0 end) as December
    from trading.DeliveryReceipt A
    inner join trading.DeliveryReceiptDetail B
    on A.DocNumber = B.DocNumber
    group by year(docdate)

select YEAR(docdate),
    sum(case when MONTH(DocDate) = 1 then ReturnedQty else 0 end) as January,
    sum(case when MONTH(DocDate) = 2 then ReturnedQty else 0 end) as February,
    sum(case when MONTH(DocDate) = 3 then ReturnedQty else 0 end) as March,
    sum(case when MONTH(DocDate) = 4 then ReturnedQty else 0 end) as April,
    sum(case when MONTH(DocDate) = 5 then ReturnedQty else 0 end) as May,
    sum(case when MONTH(DocDate) = 6 then ReturnedQty else 0 end) as June,
    sum(case when MONTH(DocDate) = 7 then ReturnedQty else 0 end) as July,
    sum(case when MONTH(DocDate) = 8 then ReturnedQty else 0 end) as August,
    sum(case when MONTH(DocDate) = 9 then ReturnedQty else 0 end) as September,
    sum(case when MONTH(DocDate) = 10 then ReturnedQty else 0 end) as October,
    sum(case when MONTH(DocDate) = 11 then ReturnedQty else 0 end) as November,
    sum(case when MONTH(DocDate) = 12 then ReturnedQty else 0 end) as December
    from trading.SalesReturn C
    inner join trading.SalesReturnDetail D
    on C.DocNumber = D.DocNumber
    group by year(docdate)

It will show something like this...

http://i.imgur.com/Fjc0V2Y.png?1

What I want is to subtract the second table from the first table. I don't know how to do it. I've tried several things but still no luck.

Just use a join and subtract the values:

select d.yr,
       (d.January - r.January) as January,
       . . .
       (d.December - r.December) as December
from (select YEAR(docdate) as yr,
             sum(case when MONTH(DocDate) = 1 then DeliveredQty else 0 end) as January,
             sum(case when MONTH(DocDate) = 2 then DeliveredQty else 0 end) as February,
             sum(case when MONTH(DocDate) = 3 then DeliveredQty else 0 end) as March,
             sum(case when MONTH(DocDate) = 4 then DeliveredQty else 0 end) as April,
             sum(case when MONTH(DocDate) = 5 then DeliveredQty else 0 end) as May,
             sum(case when MONTH(DocDate) = 6 then DeliveredQty else 0 end) as June,
             sum(case when MONTH(DocDate) = 7 then DeliveredQty else 0 end) as July,
             sum(case when MONTH(DocDate) = 8 then DeliveredQty else 0 end) as August,
             sum(case when MONTH(DocDate) = 9 then DeliveredQty else 0 end) as September,
             sum(case when MONTH(DocDate) = 10 then DeliveredQty else 0 end) as October,
             sum(case when MONTH(DocDate) = 11 then DeliveredQty else 0 end) as November,
             sum(case when MONTH(DocDate) = 12 then DeliveredQty else 0 end) as December
      from trading.DeliveryReceipt A inner join
           trading.DeliveryReceiptDetail B
           on A.DocNumber = B.DocNumber
      group by year(docdate)
     ) d join
     (select YEAR(docdate) as yr,
             sum(case when MONTH(DocDate) = 1 then DeliveredQty else 0 end) as January,
             sum(case when MONTH(DocDate) = 2 then DeliveredQty else 0 end) as February,
             sum(case when MONTH(DocDate) = 3 then DeliveredQty else 0 end) as March,
             sum(case when MONTH(DocDate) = 4 then DeliveredQty else 0 end) as April,
             sum(case when MONTH(DocDate) = 5 then DeliveredQty else 0 end) as May,
             sum(case when MONTH(DocDate) = 6 then DeliveredQty else 0 end) as June,
             sum(case when MONTH(DocDate) = 7 then DeliveredQty else 0 end) as July,
             sum(case when MONTH(DocDate) = 8 then DeliveredQty else 0 end) as August,
             sum(case when MONTH(DocDate) = 9 then DeliveredQty else 0 end) as September,
             sum(case when MONTH(DocDate) = 10 then DeliveredQty else 0 end) as October,
             sum(case when MONTH(DocDate) = 11 then DeliveredQty else 0 end) as November,
             sum(case when MONTH(DocDate) = 12 then DeliveredQty else 0 end) as December
      from trading.SalesReturn C inner join
           trading.SalesReturnDetail D
           on C.DocNumber = D.DocNumber
      group by year(docdate)
     ) r
     on r.year = d.year;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM