0

我的数据由许多工人(例如 a file2006file2007)的年表组成,包括。雇主 ID 和公司 ID。我还通过一些计算(如下)对集团公司进行了查看,这些计算groups似乎完成得很好,所以没有显示出来。但是,我想我有查询通过使用下面的代码通过这些分组来计算每家公司从 2006 年到 2007 年的总工资账单的变化。与先前视图的快速计算不同,这会使系统长时间停滞,并最终因一些有关映射问题的错误消息而中断。那么这样做的正确方法是什么?

CREATE VIEW sys.change2007 (firmid,groups,wagebillchange) AS (
SELECT file2006.firmid,MAX(groups.groups), (
    SELECT SUM(file2007.wage)/SUM(file2006.wage) FROM file2006, file2007
    WHERE file2006.firmid = file2007.firmid
    )
FROM file2006, file2007, groups
WHERE file2006.firmid = file2007.firmid AND file2006.peorglopnr = groups.firmid
GROUP BY file2006.firmid
);
4

1 回答 1

2

你永远不应该,from clause. 在您的情况下,问题是因为您正在对每个公司的员工从一年到下一年进行笛卡尔积。因此,如果一家公司每年有 100 名员工,那么您需要为该公司处理 10,000 行。

解决方案是预先聚合结果。您应该能够这样做:

SELECT f006.firmid, f2007.wage / f2006.wage as ratio
FROM (select firmid, sum(wage) as wage
      from file2006
      group by firmid
     ) f2006 join
     (select firmid, sum(wage) as wage
      from file2007
      group by firmid
     ) f2007
     on f2006.firmid = f007.firmid;

我无法groups从您的查询中看出该表的意图是什么,但您应该能够以此为基础。

于 2014-06-12T10:53:29.267 回答