- - PR -
SQLServer2005で、SELECTのなかにSELECT SUMを入れたい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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文をどのように書けばよいのでしょうか? どうかご教授ください、よろしくお願いします |
|
投稿日時: 2008-11-10 13:39
○「物件テーブル」を「物件CDK」、「社員CDK」でグルーピングした物。
○「作業時間テーブル」を「物件CDK」、「社員CDK」、「年月K」でグルーピングした物。 上記を2つをサブクエリとした SQL で取得できないでしょうか。 |
|
投稿日時: 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