2016-12-30 8 views
0

У меня есть 2 таблицы. В одной таблице перечислены все записи, которые мы отслеживаем. Другая таблица содержит флаги атрибутов записей в первой таблице.Установка значения столбца в инструкции SELECT на основе значения, существующего в другой таблице

Например, в таблице 1 имеет столбцы

Tab1ID, Name, Address, Phone 

Таблица 2 содержит колонки

Tab2ID, Tab1ID, FlagName 

Существует 1 до Многие отношения между Table1 и Table2 связаны Tab1ID.

Я хотел бы создать запрос, в котором есть все записи из таблицы1. Однако, если одна из записей в таблице2 имеет Flagname = Retired (с соответствующим Tab1ID), тогда я хочу, чтобы «Y» отображался в списке столбцов выбора, иначе «N».

Я думаю, что это может выглядеть примерно так:

Select Name, Address, Phone, (select something in table2) 
from Table1 
where Tab1ID > 1; 

Это подзапрос в столбец, который имеет меня в тупик.

Pat

ответ

1

Вы можете использовать exists:

Select t1.*, 
     (case when exists (select 1 
          from table2 t2 
          where t2.tab1id = t1.tab1id and t2.flagname = 'Retired' 
         ) 
      then 'Y' else 'N' 
     end) as retired_flag 
from Table1 t1; 
0

Я хотел бы сделать нормальный присоединиться возвращения несколько записей, но преобразовать их в клочья с тематическими заявления. Затем используйте это как подзапрос и вытащите максимальное значение для каждого столбца бит.

select 
    name 
    ,address 
    ,phone 
    ,max(retired_flag) 
from (
    select 
     table1.name 
     ,table1.address 
     ,table1.phone 
     ,case when table2.flagname = 'retired' then 1 else 0 end as [retired_flag] 
    from table1 
    left join table2 
     on table1.tab1id = table2.tab1id 
    where tab1id > 1 
    ) tbl 
group by 
    name 
    ,address 
    ,phone 

 Смежные вопросы

  • Нет связанных вопросов^_^