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