首页 > 解决方案 > X Element 匹配时在表之间减去数据

问题描述

解释有点长,但我想让我尽可能详细地理解这个问题。我有 4 个表格,2 个表示使用的材料和退回的材料的信息(TransactionsReturns),另外 2 个表详细说明使用或退回的材料(Trans_det1Devol_det1

每种材料使用与否都由boletas(工单)详述,工单详述,例如:

我有以下句子:

--REGISTRATION OF INCOME
SELECT*FROM Transa WHERE orden='GORE-999888'

--REGISTRATION OF RETURNS
SELECT*FROM Devol WHERE orden='GORE-999888'

它返回这个:

在此处输入图像描述

Transa表返回用于该订单的所有票,Devol但还显示了boletas用于退回材料的(票)。

材料细节

--WHAT WAS USED
SELECT Transa_det1.boleta, Transa_det1.rollo, Transa_det1.cantidad FROM Transa_det1,Transa 
WHERE Transa.boleta=Transa_det1.boleta AND orden='GORE-999888'

--WHAT WAS RETURNED
SELECT Devol_det1.boleta, Devol_det1.rollo, Devol_det1.cantidad FROM Devol_det1, Devol
WHERE Devol_det1.boleta=Devol.boleta AND orden='GORE-999888'

它返回这个:

在此处输入图像描述

它返回rollos订单 XXXX 的票中使用的数量以及使用了多少,第二个表显示了rollos返回的数量。

我的问题,对于RT0102 rollo我正在使用的100.5,但后来我返回100了我真正使用的是0.5,相同的RT0103使用250,但后来我返回50了,有一种方法可以在rollo匹配时进行减法,而它们的顺序相同单个查询?我的意思是我需要一种方法来返回这个:

RT0103 0.5
RT0102 200
FH0091 465.75 //DON'T SUFFER CHANGES BECAUSE I DIDN'T RETURN THIS MATERIAL

标签: c#sql

解决方案


下面将是获得预期结果的查询,您可以使用 case 语句

select t1.rollo, 
case when t2.cantidad is null then 0 // if canditad does not have value in DevolDtl then return 0 else do the subtraction 
else t1.cantidad-t2,canditad end as result from
    (
    SELECT Transa_det1.boleta, Transa_det1.rollo, Transa_det1.cantidad FROM Transa_det1,Transa 
    WHERE Transa.boleta=Transa_det1.boleta AND orden='GORE-999888') t1
    left outer join
    (
    SELECT Devol_det1.boleta, Devol_det1.rollo, Devol_det1.cantidad FROM Devol_det1, Devol
    WHERE Devol_det1.boleta=Devol.boleta AND orden='GORE-999888') t2
    on t1.boleta=t2.boleta;

推荐阅读