【问题标题】:Combining various results from various queries/tables/views in summary table在汇总表中组合来自各种查询/表/视图的各种结果
【发布时间】:2017-11-11 21:06:38
【问题描述】:

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

所有表格共有 3 列:

年份 月 客户

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

但是我正在努力将所有内容放在一起,我的表格中有原始数据。

订单号/行/客户/年/月

视图在做:

订单数/行总和/客户/年/月。

但是由于视图的变化,我不能做类似 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,这样我就可以做 WHERE ALL_TABLES = 2017 年,月 = 5 月。但意识到 UNION 将不起作用,因为它们现在合并行列。

【问题讨论】:

    标签: sql merge views union


    【解决方案1】:

    您可以像加入表格一样加入视图...似乎LEFT JOIN 是您想要的,COALESCE() 可以处理空值:

    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 中不存在,您将需要更多逻辑。

    【讨论】:

    • 谢谢,效果很好。 :) 我以前试过这个,但我想我一次尝试把 15 张桌子放在一起有点太多了。这适用于 2,所以我将继续构建视图并继续前进。
    • @Alphaturian Ha,这发生在我们所有人身上,但我很高兴这对你有用。如果所有视图/表都具有Year/Month/ClientCode 关系,则应考虑将FROM table 中所有可能组合的不同列表,然后将LEFT JOIN 所有其他视图拉到基本视图。它将保持清洁并帮助确保您不会在途中丢失记录。
    • 嗨亚伦,我有一个静态表:年/月/客户端代码,但是当我将它作为第一个表时,然后将 2 个视图添加为左连接,甚至尽管它们在静态表的左连接上链接,但它并不完全有效。我是否还需要它们都相互左外连接?
    • @Alphaturian 不,只要基表是正确的,只要它是一个不同的列表以防止重复。但是,您应该将您的选择更改为从第一个表中获取 Year/Month/ClientCode,然后您可能需要 COALESCE() View1 中的 Count 和 Sum 列。
    • @Alphaturian 如果这不是问题,(我只是猜测是)你将不得不解释哪个部分不太有效。
    猜你喜欢
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多