我想将数据不均匀的多个视图合并在一起。让我用示例数据进行解释
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行。
答案 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
解决方案更可取,因为每个视图只能访问一次,因此视图中的任何代码都不会多次运行。