こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLServer2005のSELECT文作成について

SQLServer2005初心者ですが、おわかりになる方いらっしゃいましたら、教えてください。お願いします。

やりたいことは(下記は間違いのSELECT文ですが)
SELECT
Nomber
, SUM(ISNULL(CASE WHEN KenYY + KenMM = '200711'
THEN Siyoryo ELSE 0 END, 0)) AS '2007年11月'
, SUM(ISNULL(CASE WHEN KenYY + KenMM = '200712'
THEN Siyoryo ELSE 0 END, 0)) AS '2007年12月'
,  MAX(ISNULL(CASE WHEN RecNO = MIN(RecNO) THEN Sedai
ELSE '' END, ''))Sedai_MIN
,  MAX(ISNULL(CASE WHEN RecNO = MAX(RecNO) THEN Sedai
ELSE '' END, ''))Sedai_MAX
FROM
TABLE
GROUP BY
Nomber

で、SELECTの最後のSedai_MIN,Sedai_MAXで集計関数を2回使っているので、エラーがでるのは分かるのですが、始めのMAXを消すとGROUPBY句にSedaiとRecNOが含まれていないというエラーがでて、GROUPBYに追加すると、同じNomberが複数でてしまうのです。
同じNomberは1つしか出ないようにする場合、上記のSELECT文をどのように変更すればよろしいのでしょうか?
回答よろしくお願いいたします。

投稿日時 - 2007-12-14 14:43:51

QNo.3597764

すぐに回答ほしいです

質問者が選んだベストアンサー

現在、実際に試せる環境が無いので若干文法が間違っているかもしれませんが、以下の内容でいけるのではないかと思います。

SELECT
T01.Nomber
,SUM(ISNULL(CASE WHEN KenYY + KenMM = '200711' THEN Siyoryo ELSE 0 END, 0)) AS 2007年11月
,SUM(ISNULL(CASE WHEN KenYY + KenMM = '200712' THEN Siyoryo ELSE 0 END, 0)) AS 2007年12月
,MAX(ISNULL(CASE WHEN T01.RecNO = T02.MIN_RecNO THEN Sedai ELSE 0 END, 0)) AS Sedai_MIN
,MAX(ISNULL(CASE WHEN T01.RecNO = T02.MAX_RecNO THEN Sedai ELSE 0 END, 0)) AS Sedai_MAX
FROM TABLE T01
INNER JOIN
(SELECT Nomber
,MIN(RecNO) AS MIN_RecNO
,MAX(RecNO) AS MAX_RecNO
FROM TABLE
GROUP BY Nomber) T02
ON T01.Nomber = T02.Nomber
GROUP BY T01.Nomber

投稿日時 - 2007-12-15 23:05:05

お礼

先ほど、動作確認しましたところ、
無事に私が望んでいた結果が出ました。
助かりました。
本当にありがとうございました。

投稿日時 - 2007-12-17 09:24:34

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.2

補足ありがとうございます。

えーと、再度確認なのですが、
Sedai_MIN=Nomberの中で一番小さいRecNOのレコードのSedai
Sedai_MAX=Nomberの中で一番大きいRecNOのレコードのSedai
でしょうか??

出力結果の例だと、単純に
MIN(Sedai) AS Sedai_MIN,
MAX(Sedai) AS Sedai_MAX
で済む様に思えるのですが。。。

投稿日時 - 2007-12-14 16:36:13

補足

またまた回答ありがとうございます。
Sedai_MIN=Nomberの中で一番小さいRecNOのレコードのSedai
Sedai_MAX=Nomberの中で一番大きいRecNOのレコードのSedai
であっています。

力結果
Nomber 2007年11月 2007年12月 Sedai_MIN Sedai_MAX
01     0     100     1     2←間違いでした
02 100 200 4 4
03 30 0 1 1

投稿日時 - 2007-12-15 10:53:21

お礼

スミマセン、補足の訂正です。
出力結果
Nomber 2007年11月 2007年12月 Sedai_MIN Sedai_MAX
01      0      100     1     2←間違いでした
02     100     200     4     4
03     30      0     1     1

でした。すみません。

申し訳ございませんが、よろしくお願いいたします。

投稿日時 - 2007-12-15 11:02:26

ANo.1

テーブル構造、KEY項目については、どの様な設定に
なっているのでしょうか?

また可能であれば、
テーブル内のデータ、及び出力結果の例などを書いて頂けると
回答しやすいかと思います。

投稿日時 - 2007-12-14 15:14:39

補足

TABLE
Nomber RecNO KenYY KenMM Sedai Siyoryo
01 01 2007 12 1 100
01 04 2007 09 3 40
01 10 2006 11 2 370
02 01 2007 12 4 200
02 03 2006 11 4 100
03 02 2007 11 1 30
03 08 2006 07 1 100
(KEYはNomberです)

出力結果
Nomber 2007年11月 2007年12月 Sedai_MIN Sedai_MAX
01 0 100 1 3
02 100 200 4 4
03 30 0 1 1

すみません、説明不足で。
また回答よろしくお願いします。

投稿日時 - 2007-12-14 15:33:18

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-