如果在表中,将返回true的不同SQL

时间:2014-07-31 10:28:33

标签: sql sql-server tsql

我在写这个sql的最佳方式上画一个空白, 为简单起见,我只对一栏感兴趣。 表A列= [供应商]。 表B栏= [授权供应商]

表A包含[Supplier]中具有相同值的许多行。

Table A
------------------------------
ID |Supplier      | Company  |
---|--------------|----------|
1  | Warehouse 1  | Company 1|
2  | Warehouse 1  | Company 2|
3  | Warehouse 1  | Company 3|
4  | Warehouse 2  | Company 4|
5  | Warehouse 2  | Company 5|
6  | Warehouse 3  | Company 6|
7  | Warehouse 3  | Company 7|
8  | Warehouse 3  | Company 8|

表B包含表A [供应商]行中的单个供应商。

Table B
------------------------------
ID |AuthorizedSupplier       |
---|-------------------------|
1  | Warehouse 1             | 
2  | Warehouse 2             | 

我需要返回[Supplier]和[AuthorizedSupplier]的DISTINCT值,并附加一列,让我们称之为[授权],表B中的那些值标记为true

因此上面示例的结果集应如下所示

Result Set
------------------------------
Supplier    |Authorized      |
------------|----------------|
Warehouse 1 | True           |
Warehouse 2 | True           |
Warehouse 3 | False          |

3 个答案:

答案 0 :(得分:2)

使用DistinctLeft Outer Join

SELECT DISTINCT Supplier, Authorized = CASE WHEN B.AuthorizedSupplier IS NULL
                                       THEN 'True' ELSE 'False' END
FROM TableA A
LEFT OUTER JOIN TableB B
  ON A.Supplier = B.AuthorizedSupplier

SQL-Fiddle Demo

答案 1 :(得分:1)

SELECT A.Supplier
     , CASE WHEN B.AuthorizedSupplier IS NULL
          THEN 'True' ELSE 'False' END  AS Authorized
 FROM (Select Distinct Supplier
         FROM TableA)          A
        LEFT OUTER JOIN  TableB

答案 2 :(得分:0)

Select distinct A.Supplier, (Case When B.Id IS NULL Then 0 else 1 end) Authorized
from TableA A
    Left Outer Join TableB  B ON A.Supplier = B.AuthorizedSupplier