ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3597764 SQLServer2005のSELECT文作成について
質問者:a_mi 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文をどのように変更すればよろしいのでしょうか?
回答よろしくお願いいたします。
困り度:
  • すぐに回答を!
質問投稿日時:
07/12/14 14:43
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.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
回答者:chezusao
種類:回答
どんな人:専門家
自信:参考意見
回答日時:
07/12/15 23:05
この回答へのお礼先ほど、動作確認しましたところ、
無事に私が望んでいた結果が出ました。
助かりました。
本当にありがとうございました。

回答

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

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

出力結果の例だと、単純に
MIN(Sedai) AS Sedai_MIN,
MAX(Sedai) AS Sedai_MAX
で済む様に思えるのですが。。。
回答者:chezusao
種類:補足要求
どんな人:専門家
自信:参考意見
回答日時:
07/12/14 16:36
この回答への補足またまた回答ありがとうございます。
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
この回答へのお礼スミマセン、補足の訂正です。
出力結果
Nomber 2007年11月 2007年12月 Sedai_MIN Sedai_MAX
01      0      100     1     2←間違いでした
02     100     200     4     4
03     30      0     1     1

でした。すみません。

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

回答

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

また可能であれば、
テーブル内のデータ、及び出力結果の例などを書いて頂けると
回答しやすいかと思います。
回答者:chezusao
種類:補足要求
どんな人:専門家
自信:参考意見
回答日時:
07/12/14 15:14
この回答への補足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

すみません、説明不足で。
また回答よろしくお願いします。
この回答へのお礼この回答にお礼をつける(質問者のみ)