Sql 记录来自哪个表,如果有多个表
我有4个表(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
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