我有2张桌子。一个表列出了我们跟踪的项目的所有记录。另一个表包含第一个表中记录的属性标志。
例如,表1有列
Tab1ID, Name, Address, Phone
表2包含这些列
Tab2ID, Tab1ID, FlagName
Tab1ID链接的Table1和Table2之间存在1对多的关系。
我想创建一个包含Table1中所有记录的查询。但是,如果Table2中的一个记录具有Flagname = Retired(具有匹配的Tab1ID),那么我想要一个" Y"显示在选择列列表中,否则为" N"。
我认为它可能看起来像这样:
Select Name, Address, Phone, (select something in table2)
from Table1
where Tab1ID > 1;
列中的子查询让我难过。
专利
答案 0 :(得分: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;
答案 1 :(得分:0)
我会做一个正常的连接返回多个记录,但是将它们转换为带有case语句的位。然后将其用作子查询并拉出每个位列的最大值。
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