在多个表中选择条件布尔值

时间:2018-08-17 15:22:15

标签: sql sql-server

我有三个简化的表格,如下所示:

enter image description here

我要尝试的是,如果ID所附的 ITEM AND CUSTOMER (商品和客户)在表C中具有 VALUE ,则从表A中选择一个自定义布尔值B互相匹配。

下面是我当前的查询,以演示我正在尝试做的事情:

SELECT DISTINCT ID, 
            CUSTOMER, 
            ITEM, 
            CASE WHEN B.VALUE = C.VALUE THEN 1 ELSE 0 END AS 'VALUEMATCH'
FROM A
LEFT JOIN B
ON A.CUSTOMER = B.CUSTOMER
LEFT JOIN C
ON A.ITEM = C.ITEM

...,并且ID = 1和Item1的结果查询(例如)为:

enter image description here

...,我知道为什么会得到它,但是看不到解决它的明确方法,即使我可以按照我的意愿去做?

我正在寻找的结果描述如下:

enter image description here

3 个答案:

答案 0 :(得分:3)

使用exists

select a.*,
       (case when exists (select 1
                          from b join
                               c
                               on b.value = c.value
                          where b.customer = a.customer and c.item = a.item
                         ) 
              then 1 else 0
         end) as valuematch
from a;

答案 1 :(得分:2)

除了其他答案,看起来您可以对现有查询进行查询,将MAX函数放在ValueMatch上,并将GROUP BY放在其他三列上。

这将是代码:

SELECT  ID, 
        CUSTOMER, 
        ITEM, 
        MAX(CASE WHEN B.VALUE = C.VALUE THEN 1 ELSE 0 END) AS VALUEMATCH
FROM A
LEFT JOIN B
    ON A.CUSTOMER = B.CUSTOMER
LEFT JOIN C
    ON A.ITEM = C.ITEM
GROUP BY ID, 
         CUSTOMER, 
         ITEM
;

答案 2 :(得分:1)

您可以:

{{1}}