【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

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文をどのように変更すればよろしいのでしょうか?
回答よろしくお願いいたします。

A 回答 (3件)

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



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/12/17 09:24

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



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

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

この回答への補足

またまた回答ありがとうございます。
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
    • good
    • 0
この回答へのお礼

スミマセン、補足の訂正です。
出力結果
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

テーブル構造、KEY項目については、どの様な設定に


なっているのでしょうか?

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

この回答への補足

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す