0

file2006私のデータは、多くの労働者 (例: a 、 )の年間テーブルで構成されていfile2007ます。雇用主 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

,ではs を使用しないでください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 に答える