Sql 记录来自哪个表,如果有多个表

Sql 记录来自哪个表,如果有多个表,sql,sql-server-2005,Sql,Sql Server 2005,我有4个表(Table1到Table4)和每个表中的code列。我使用UNION ALL来识别它们的来源 select distinct CODE, 'Table1' from Table1 where TABLE1_EFF_STARt >= '01/01/2014' union all select distinct CODE, 'Table2' from Table2 where TABLE2_EFF_STARt >= '01/01/2014' union all sele

我有4个表(
Table1
Table4
)和每个表中的
code
列。我使用
UNION ALL
来识别它们的来源

select  distinct CODE, 'Table1'  from Table1 where TABLE1_EFF_STARt >= '01/01/2014'
union all
select  distinct CODE, 'Table2' from Table2 where TABLE2_EFF_STARt >= '01/01/2014'
union all
select  distinct CODE, 'Table3' from Table3 where TABLE3_EFF_STARt >= '01/01/2014'
union all
select  distinct CODE, 'Table4' from Table4 where TABLE4_EFF_STARt >= '01/01/2014' 
有时同一个
code
可以存在于多个表中,我希望以下表的形式识别并返回结果。当在多个表中编码时,我想在
多源
列中将其标记为
Y

CODE    Table1  Table2  Table3  Table4  Multisource

12345   Y       N       N       N       N
34233   Y       Y       N       N       Y
45345   Y       N       N       N       N
23417   Y       N       Y       N       Y
45346   Y       N       N       N       Y

一个选项是使用
条件聚合
来调整结果:

select code, 
       max(case when tbl = 'Table1' then 'Y' else 'N' end) 'Table1',
       max(case when tbl = 'Table2' then 'Y' else 'N' end) 'Table2',
       max(case when tbl = 'Table3' then 'Y' else 'N' end) 'Table3',
       max(case when tbl = 'Table4' then 'Y' else 'N' end) 'Table4',
       case when count(*) > 1 then 'Y' else 'N' end 'Multisource'
from (
  select  distinct CODE, 'Table1' as tbl from Table1 where TABLE1_EFF_STARt >= '01/01/2014'
  union all
  select  distinct CODE, 'Table2' from Table2 where TABLE2_EFF_STARt >= '01/01/2014'
  union all
  select  distinct CODE, 'Table3' from Table3 where TABLE3_EFF_STARt >= '01/01/2014'
  union all
  select  distinct CODE, 'Table4' from Table4 where TABLE4_EFF_STARt >= '01/01/2014'
) t
group by code