Если значение в обеих таблицах, тогда присвойте 1 - PullRequest
0 голосов
/ 31 октября 2018
    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 я хочу добавить фиктивную переменную, которая присваивает 1, если companyID находится в таблице 2 (что означает, что у компании есть акционеры), и 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

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Для этого вы должны использовать подзапрос. приведенный ниже код работает нормально.

SELECT CASE WHEN companyID in(select CompanyId  from table2) THEN 1
ELSE 0
END AS dummy
FROM table1 
0 голосов
/ 31 октября 2018

Если версия вашей БД 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

0 голосов
/ 31 октября 2018

Вы можете использовать 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;
...