SQL:返回具有多个条件的单个值

时间:2018-12-04 16:07:31

标签: sql

也许是一个简单的问题,但我没有得到正确的结果,所以希望您能提供帮助。在这种情况下,我有两个不同的表,一个表中填充有订单数据(OrderID,Supplier和Order Value)。另一个表中填充了发票数据(发票ID,供应商,发票值,发票值-10%,发票值+ 10%)。

我需要的是基于订单表的概览,其中在订单供应商和发票供应商之间存在匹配项+订单价值在发票价值的-10%到+ 10%范围内。哪个订单属于哪个发票都无所谓,我只需要知道是否存在匹配“是”或“否”即可。

示例:在订单表中,您可以看到第1行(订单100)。它属于供应商A,价值为10。在发票表中,您可以看到第4行符合要求(供应商= A,订单价值:10-> 9到11之间的范围)。这将导致“是”。

希望您能提供帮助!

预先感谢

问候!

订单表:

enter image description here

发票表:

enter image description here

4 个答案:

答案 0 :(得分:1)

尝试:

df <- read.table(text = '
rank name
1    John
2    Lisa
3    Stu
1    Phil
1    Mike
1    Florence
2    George
3    David
4    Diana
1    Eleanor
', header = T)

答案 1 :(得分:0)

您可以通过以下选择来做到这一点:

select *, (select 1 from Supplier s where o.value - 10 > s.value and o.value + 10 < s.value and so on) as YesOrNo from table Order o;

答案 2 :(得分:0)

如果您现在需要匹配的话,请将caseexists一起使用。但是,我将建议返回匹配的发票ID。如果没有匹配项,则值为NULL

select o.*,
       (select i.id
        from invoice i
        where i.supplier = o.supplier and
              o.value between i.value * 0.9 and i.value * 1.1
        fetch first 1 row only
       ) as a_matching_invoice_id
from orders o

答案 3 :(得分:0)

select a.* into temp from order a,invoice b
where a.supplier=b.supplier and a.value=b.value

select *,case when value between min and max then state='yes'
else state='no'
end
from temp