从不同的表并排合并匹配数据

时间:2012-07-11 21:22:19

标签: sql

我有一个select语句,从一个月度汇总表中收集数据,如下所示

companyname, employee, id, usage_a, ... usage_m 

我需要从6个月度汇总表中创建报告,如下所示

companyname, employee, id, 
jan_usage_a, ...june_usage_a, average (jun_jan_usage_a), 
...  
jan_usage_m, ...june_usage_m, average (jan_jun_usage_m)

我用较少的列做了类似的事情,但是我必须创建一个包含每个月使用情况的列的表,然后用一个查询合并每月的数据。最后,我将导出到excel创建另一列,以平均所需的几个月的每次使用。

对于上面的报告,我必须创建一个超过一百列的表。 我的问题是有更好的方法吗? 感谢。

如果标题有点不清楚,请抱歉。

1 个答案:

答案 0 :(得分:1)

如果您有六个不同的表,那么您需要将它们连接在一起:

select tjan.companyname, tjan.employee, tjan.id, <rest of tjan columns>, <rest of jfeb columns>
from tjan join
     tfeb 
     on tjan.companyname = tfeb.companyname and
        tjan.employee = tfeb.employee and
        tjan.id = tfeb.id
etc. etc. etc.

您遇到的问题是不同月份的人口可能不同,因此联接会丢失行。处理此问题的一个好方法是使用驾驶表:

select . . .
from (select companyname, employee, id from tjan union
      select companyname, employee, id from tfeb union
      . . .
     ) driving left outer join
     tjan
     on tjan.companyname = driving.companyname and
        tjan.employee = driving.employee and
        tjan.id = driving.id left outer join
     tfeb
     on tfeb.companyname = driving.companyname and
        tfeb.employee = driving.employee and
        tfeb.id = driving.id left outer join
    . . .

您可以在一个SQL语句中完成所有这些操作。有重复的部分(例如选择中的列名)。考虑使用Excel生成这些。