结合汇总表中各种查询/表/视图的各种结果

时间:2017-06-09 18:38:44

标签: sql merge views union

我一直在从几个不同的数据库中提取数据,以创建一个汇总的信息表,这些信息都是关于特定列的共同信息。

所有表格共有3列:

年份 月 客户端

除此之外,它们是计数,总和,计算以及对客户各方面的一般查询的混合。我正在尝试绘制每个客户端的基本摘要页面。我的梦想是将所有这些都集中到一个集中的数据库中,将详细信息完整地放入表格中。然后对每个表格进行一系列观察,以便对每个表格进行总结。然后有一个汇总表/视图按年/月/客户分组所有视图。

然而,我很难把所有东西放在一起,我在表格中有原始数据,如。

Ordernumber / Lines / Client / Year / Month

视图正在执行:

订单数量/行数/客户/年/月。

然而,由于视图的变化,我不能做像UNION那样的事情。

(视图的)数据示例

View1 

Year    Month   Count   Sum         ClientCode
2017    May     18      146         A
2017    May     7       110         B
2017    May     2       17          C

View2
Year    Month   CountOfOrders   CountOfFiles    SumOfLines  ClientCode
2017    May                 8              2           140    A
2017    May                 7              6           25     B

梦想的目标是:

Year Month ClientCode Count Sum CountOfOrders CountOfFiles SumOfLines 
2017 May   A          18    146 8             2            140
2017 May   B          7     110 7             6            25
2017 May   C          2     17  0             0            0

任何建议都会很棒,我已经尝试过做UNIONALL,这样我就能做到ALL_TABLES = 2017年,月= 5月。但是我意识到UNION将无法正常工作,因为它们现在合并了行。

1 个答案:

答案 0 :(得分:1)

你可以像表一样加入视图......似乎你想要LEFT JOINCOALESCE()来处理空值:

SELECT V1.Year, V1.Month, V1.ClientCode, V1.Count, V1.Sum, 
       COALESCE(CountOfOrders,0) COALESCE(CountOfFiles,0) COALESCE(SumOfLines,0)
FROM View1 V1
LEFT JOIN View2 V2 ON V1.Year = V2.Year
                   AND V1.Month = V2.Month
                   AND V1.ClientCode = V2.ClientCode

唯一需要注意的是,如果View2中不存在Year/Month/ClientCode组合,则需要更多逻辑,并且不在View1中。