如何从两个数据表中减去相似列和值的行?

问题描述:

如何从两个sql数据表中减去值?我有两个数据表,我想首先匹配table1partnum列,如果它与表2partnum匹配,则从table2FinalStockout中减去table1FinalstockIN值然后另外,如果减去值是neagtive,那么如何停止减法然后显示0或null或根本不显示。



什么我试过了:



How to subtract values from two sql datatables?I have two datatable where I want to first match table1 "partnum" columns and if its match with table 2 "partnum" then subtract table1 "FinalstockIN"values from table2"FinalStockout" then display it in another column.Also, how to stop the subtraction if the minus value is neagtive then show 0 or null or dont show at all.

What I have tried:

with spare_parts as (
 
 SELECT s.SN,partnum,partdesc,partmodel,stockin,dateofstockin, (SELECT 
   SUM(stockin)
   FROM Tbl_SpareParts
   GROUP BY partnum
   Having partnum = s.partnum) AS FinalTotalStockIN FROM Tbl_SpareParts s

),
cases as (
 SELECT b.SN,partnum,partdesc,partmodel,outstock,outstockdate,outstockcaseid_billnum,remarks, (SELECT SUM(outstock)
   FROM Tbl_OutCaseID
   GROUP BY partnum
   having partnum = b.partnum) AS FinalTotalStockOut FROM Tbl_OutCaseID b
)
select
 s.SN,s.partnum,s.partdesc, s.partmodel, s.stockin, 
  s.dateofstockin, s.FinalTotalStockIN,
  c.outstock, 
  c.outstockdate, c.outstockcaseid_billnum, 
  c.remarks, c.FinalTotalStockOut,(FinalTotalStockIN - FinalTotalStockOut) as balance
  from
 
  spare_parts s
  join cases c on s.partnum = c.partnum

怎么样?


how about this?

select 
IF ISNULL(Table2.FinalStockout-Table1.FinalstockIN) then 0 else (Table2.FinalStockout-Table1.FinalstockIN)
 as FinalstockIN
from Table1 inner join Table2 on Table1.partnum=Table2.partnum


;WITH CTE AS (
SELECT DISTINCT 
        TSP.SN,TSP.partnum,TSP.partdesc,TSP.partmodel,TSP.stockin,TSP.dateofstockin,
        SUM(TSP.stockin)OVER(PARTITION BY TSP.partnum ORDER BY (SELECT 1))AS 
        FinalTotalStockIN,
        TOC.outstock,TOC.outstockdate, TOC.outstockcaseid_billnum, TOC.remarks,
        SUM(TOC.outstock)OVER(PARTITION BY TOC.partnum ORDER BY (SELECT 1)) AS 
        FinalTotalStockOut
  FROM
   DBName1.dbo.Tbl_SpareParts AS TSP 
     INNER JOIN DBName2.dbo.Tbl_OutCaseID TOC 
      ON (TSP.Partnum = TOC.Partnum)
              )

SELECT  SN,Partnum,PartModel,StockIn,DateofStockIn,FinalTotalStockIN,Outstock,
        OutStockDate,OutStockCaseid_billnum,Remarks,FinalTotalStockOut,
        CASE 
         WHEN SIGN((FinalTotalStockIN - FinalTotalStockOut))=1 
          THEN  
           (FinalTotalStockIN - FinalTotalStockOut)
             ELSE
           0 END as Balance

 FROM CTE