如何加入多个不均匀的视图

时间:2019-02-08 18:02:14

标签: sql sql-server

我想将数据不均匀的多个视图合并在一起。让我用示例数据进行解释

View1:

DATE | COL2
150 rows

View2:

DATE | COL3
30 rows

View3:

DATE | COL4
15 rows

所以我想获取如下数据:

输出:

DATE | COL2 | COL3 | COL4
150 rows with nulls on some columns

DATE列为MONTH:YEAR,如02/2019。每个由DATEPART MONTH和YEAR列构成的视图都收集在一个列中。所以我不想重复DATE行。

2 个答案:

答案 0 :(得分:2)

您可以基于日期的并集使用左联接

select t1.date, v1.COL2, v2.COL3, v3.COL4
from(

  select date from view1
  union
  select date from view2
  union
  select date from view2

) t1 
left join view1 v1 on t1.date = v1.date 
left join view2 v2 on t1.date = v2.date 
left join view1 v3 on t1.date = v3.date 

答案 1 :(得分:1)

在SQL Server中,您可以使用full join

select coalesce(v3.date, v2.date, v1.date) as date, v1.col2, v2.col3, v3.col4
from view1 v1 full join
     view2 v2
     on v2.date = v1.date full join
     view3 v3
     on v3.date = coalesce(v2.date, v1.date);

这比left join解决方案更可取,因为每个视图只能访问一次,因此视图中的任何代码都不会多次运行。