- PR -

SQLServer2005で、SELECTのなかにSELECT SUMを入れたい

1
投稿者投稿内容
なるる
会議室デビュー日: 2008/11/10
投稿数: 2
投稿日時: 2008-11-10 13:15
いつもお世話になっております。

今回、あるSQLが必要になったのですが
自分で解決に至らなかったため、皆さんのお知恵をお貸しいただきたいと思い
投稿させていただきます

1.と2.のテーブルから、3.の結果を受け取りたいのです


1.物件テーブル(フィールド名に“K”がついているものは主キー)
物件CDK 社員CDK 詳細CDK  見積時間数
----------------------------------------------------
01    001   01     50.0 A
01    001   02     30.0 B
01    002   01     1.0  C
01    002   02     2.0  D
02    001   01     10.0 E
02    001   02     25.0 F
02    002   01     20.0 G
02    002   02     5.0 H

2.作業時間テーブル(フィールド名に“K”がついているものは主キー)
物件CDK 社員CDK 詳細CDK 年月K 作業時間数
----------------------------------------------------
01    001   01    0809  50.0 I
01    001   01    0810  2.0  J
01    001   02    0809  25.0 K
01    001   02    0810  3.0  L
01    002   01    0809  0.5  M
01    002   01    0810  12.5 N
01    002   02    0809  2.0  O
01    002   02    0810  0.0  P
02    001   01    0809  11.0 Q
02    001   01    0810  1.0  R
02    001   02    0809  27.0 S
02    001   02    0810  2.0  T
02    002   01    0809  12.0 U
02    002   01    0810  12.0 V
02    002   02    0809  0.0  W
02    002   02    0810  25.0 X

3.SQL結果(物件CD='01')
物件CD 社員CD 年月 見積時間数SUM 作業時間数SUM
----------------------------------------------------
01    001  0809 80.0     75.0  (見A+B、作I+K)
01    001  0810 80.0     5.0  (見A+B、作J+L)
01    002  0809 3.0      2.5  (見C+D、作M+O)
01    002  0810 3.0     12.5  (見C+D、作N+P)

※見積時間数は、物件テーブルに年月がないこともあり
同じSUM結果が複数レコードにわたり表示されることはかまいません

※(見A+B、作I+K)などの列は、1.と2.のテーブルから
3.の結果を持ってきたいときに、見積時間数と作業時間数の合計を
それぞれどう計算しているかを書いているもので、結果としては必要ないものです

SQL文をどのように書けばよいのでしょうか?
どうかご教授ください、よろしくお願いします
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-11-10 13:39
○「物件テーブル」を「物件CDK」、「社員CDK」でグルーピングした物。
○「作業時間テーブル」を「物件CDK」、「社員CDK」、「年月K」でグルーピングした物。
上記を2つをサブクエリとした SQL で取得できないでしょうか。
なるる
会議室デビュー日: 2008/11/10
投稿数: 2
投稿日時: 2008-11-10 15:04
King様
ご返信ありがとうございます

アドバイスに従い、
GROUP BYとして
・物件CDK、社員CDK
・物件CDK、社員CDK、年月K
としたSELECT文を2つ用意し、FROM句においてINNER JOINで組み合わせたところ
希望通りの結果が出ました

以下、作成したSQLです
----------------------------------------------------
SELECT
    物件テーブル.物件CDK,
    物件テーブル.社員CDK,
    作業時間テーブル.年月K,
    物件テーブル.見積_SUM,
    作業時間テーブル.作業_SUM
FROM
    (SELECT
        物件CDK,社員CDK,SUM(見積時間数) AS 見積_SUM
    FROM
        物件テーブル
    GROUP BY
        物件CDK,社員CDK) AS 物件テーブル
    INNER JOIN
    (SELECT
        物件CDK,社員CDK,年月K,SUM(作業時間数) AS 作業_SUM
    FROM
        作業時間テーブル
    GROUP BY
        物件CDK,社員CDK,年月K) AS 作業時間テーブル
    ON
        物件テーブル.物件CDK=作業時間テーブル.物件CDK
    AND
        物件テーブル.社員CDK=作業時間テーブル.社員CDK
WHERE
    物件テーブル.物件CDK='01'
----------------------------------------------------

アドバイスありがとうございました
またお世話になると思いますので、そのときは
よろしくお願いいたします
1

スキルアップ/キャリアアップ(JOB@IT)