【问题标题】:If value in both table then assign 1如果两个表中都有值,则分配 1
【发布时间】:2018-10-31 10:25:18
【问题描述】:
    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

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

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

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

SELECT CASE WHEN companyID IN table2 THEN 1
ELSE 0
END AS dummy
FROM table1

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你可以使用 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;
      

      【讨论】:

        【解决方案3】:

        如果您的数据库版本是 2012+,那么使用 left join 作为:

        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 );
        

        select t1.*,
               sign(coalesce(#_of_Shareholders,0))
               as dummy
          from table1 t1
          left join table2 t2
            on ( t1.CompanyID = t2.CompanyID ); 
        

        Rextester Demo

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-11-02
          • 2018-07-07
          • 1970-01-01
          • 1970-01-01
          • 2019-12-24
          • 2016-07-28
          • 1970-01-01
          相关资源
          最近更新 更多