我在写这个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 |
答案 0 :(得分:2)
使用Distinct
和Left 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
答案 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