如果两个表中都有值,则分配1

时间:2018-10-31 10:25:18

标签: sql sql-server if-statement case-when

Sheet2

我有两个带有CompanyID列的表。在表2中,您可以找到有股东的公司;在表1中,您可以找到所有公司。因此,在表1中,我想添加一个虚拟变量,如果companyID在table2中(这意味着公司有股东),则分配一个1,否则将分配一个0。

    Table1  CompanyID  Location  #-of-employees
          5234       NY          10
          5268       DC          2
          5879       NY          8
          6897       KS          100
          8789       CA          1
          9992       OH          201
          9877       TX          15

Table2 CompanyID   #-of-Shareholders
          5234            5
          5879            2
          6897            4
          8789            2

我尝试使用此查询,但没有给我期望的输出。

Expected output:
    Table1  CompanyID  Location  #-of-employees Dummy
              5234       NY          10           1
              5268       DC          2            0
              5879       NY          8            1
              6897       KS          100          1
              8789       CA          1            1
              9992       OH          201          0
              9877       TX          15           0

3 个答案:

答案 0 :(得分:1)

您必须为此使用子查询。下面的代码工作正常。

SELECT CASE WHEN companyID in(select CompanyId  from table2) THEN 1
ELSE 0
END AS dummy
FROM table1 

答案 1 :(得分:0)

您可以使用EXISTS

SELECT  CASE
            WHEN EXISTS(SELECT 1 FROM Table2 AS T2 WHERE T1.CompanyID = T2.CompanyID) THEN 1
            ELSE 0
        END AS Dummy
FROM    Table1 AS T1;

答案 2 :(得分:0)

如果您的数据库版本为<link rel="stylesheet" href="assets/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"> ,请与2012+一起使用:

left join

else

select t1.*, iif(#_of_Shareholders is null, 0, 1) as dummy
  from table1 t1
  left join table2 t2
    on ( t1.CompanyID = t2.CompanyID );

select t1.*, 
       ( case when #_of_Shareholders is null then 0 else  1 end ) 
       as dummy
  from table1 t1
  left join table2 t2
    on ( t1.CompanyID = t2.CompanyID );

Rextester Demo