- - PR -
グループ化の仕方がわかりません
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-01 16:10
SELECT DOC_NO FROM AAA WHERE CD='1' AND ID='90009999' AND KNS_CODE IN ('000000', '111111', '222222') ORDER BY CD, YMD, KNS_CODE ASC
というSQLを流すと DOC_NO -------------------- AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA BBBBBBBBBB BBBBBBBBBB BBBBBBBBBB CCCCCCCCCC DDDDDDDDDD DDDDDDDDDD DDDDDDDDDD DDDDDDDDDD DDDDDDDDDD というデータが取得できます。 DOC_NOを一件ずつ取得したい場合GROUP BY DOC_NOだと思うのですが、 エラーばかりでどうしてもうまくいきません・。 どなたかお詳しい方教えてください!! | ||||||||
|
投稿日時: 2005-11-01 16:21
こんにちは。
試しに SELECT DOC_NO FROM AAA WHERE CD='1' AND ID='90009999' AND KNS_CODE IN ('000000', '111111', '222222') GROUP BY DOC_NO は上手く行きますでしょうか? AAAAAAAAAA BBBBBBBBBB CCCCCCCCCC DDDDDDDDDD になれば良いと言うことですよね? (今回はORDER BY が無いので順不同になりますけど...) [ メッセージ編集済み 編集者: SIVA 編集日時 2005-11-01 16:23 ] | ||||||||
|
投稿日時: 2005-11-01 16:22
こんにちは。
DOC_NOを一件ずつ取得したいというのは、重複データは取得しないという意味でしょうか? もしそれでしたら「DISTINCT」が有効だと思います。 <追記> すみません、グループ化のやり方のご質問でしたね; どんな風に書かれているのかわかりませんが、GROUPBYはORDERBYより先に入れるようにしてみてください。m(__)m _________________ たまき@天 凶暴な兎ほど可愛い!? [ メッセージ編集済み 編集者: たまき 編集日時 2005-11-01 16:41 ] [ メッセージ編集済み 編集者: たまき 編集日時 2005-11-01 16:44 ] | ||||||||
|
投稿日時: 2005-11-01 16:42
SIVAさん、たまきさん
返答ありがとうございます。 質問が悪くてすみませんでした。 AAAAAAAAAA BBBBBBBBBB CCCCCCCCCC DDDDDDDDDD というデータが取得できれば」成功なのですが。。。 >試しに >SELECT DOC_NO FROM AAA WHERE CD='1' AND ID='90009999' AND KNS_CODE IN <('000000', '111111', '222222') GROUP BY DOC_NO > >は上手く行きますでしょうか? できましたが、YMDなどの順序は必要なのでORDERBYは省くことができません(><) >DOC_NOを一件ずつ取得したいというのは、重複データは取得しないという意味でしょうか? >もしそれでしたら「DISTINCT」が有効だと思います。 「ORDER BY句 (CD)がDISTINCT句と矛盾しています」というエラーメッセージがでてしまします。 | ||||||||
|
投稿日時: 2005-11-01 16:52
エラー内容も、DBの種類も書かれていませんが、 グループ化した項目を表示して、 表示しない項目でソートをしたいんですか? Oracleとかですと、ORDER BYの説明文に以下のような内容が書かれています。
| ||||||||
|
投稿日時: 2005-11-01 17:02
ちょっと列が多いので少なくして例をあげると。
わしこさんがDBMSだったとして、こんなデータに対して
「DOC_NOでグループ化しつつCDでソートしてくれ」 と言われたら困りませんか?「どのCD使うんだよ」ってなりますよね。 エラーメッセ−ジは、多分そんな感じのことを言われてるんだと思います。 だから上記の例の場合は、 SELECT DOC_NO, MAX(CD) AS MAX_CD FROM AAA GROUP BY DOC_NO ORDER BY MAX_CD みたいにすればいいのだと思います。 余談ですが、SQLに関する質問なら、Database Expert 会議室の方がいいかもです。 | ||||||||
|
投稿日時: 2005-11-01 17:25
ぼのぼのさん、夏椰さん返信ありがとうございます。
DBはORACLEです。 >「DOC_NOでグループ化しつつCDでソートしてくれ」 >と言われたら困りませんか?「どのCD使うんだよ」ってなりますよね。 >エラーメッセ−ジは、多分そんな感じのことを言われてるんだと思います。 すごく解りやすいご説明ありがとうございます。 何故エラーになるのか解りました。 >だから上記の例の場合は、 >SELECT DOC_NO, MAX(CD) AS MAX_CD FROM AAA >GROUP BY DOC_NO >ORDER BY MAX_CD >みたいにすればいいのだと思います。 もしデータが以下のようになってもできますでしょうか? ACCESSで試してみたところYMDの入力が要求されました。 DOC_NO YMD(※CDからYMDに変更しました) -------------------- AAAAAAAAAA 2222 AAAAAAAAAA 2222 AAAAAAAAAA 1000 AAAAAAAAAA 1000 AAAAAAAAAA 2222 BBBBBBBBBB 0000 BBBBBBBBBB 0000 BBBBBBBBBB 0000 CCCCCCCCCC 8888 DDDDDDDDDD 2222 DDDDDDDDDD 2222 [/code] 当初は ORDER BY CD, YMD, KNS_CODE ASC と書いていましたが、CD、KNS_CODEは同じ値なのでソートしないとして、 YMDだけは必ずソートしなくてはいけないのですが、 同じ日付が入ってくる場合がかなりあるのです。 どうかよろしくお願いします。 | ||||||||
|
投稿日時: 2005-11-01 17:47
こんにちは、でっちです。
ちょっと抽出します。
この部分ですが、同一のDOC_NOに対してYMDが2種類あります。 グループ化の結果取得したいデータは、1件、2件のどちらになるのでしょうか? 1件であれば、先にぼのぼのさんが書かれたように、MINやMAX等のグループ関数を使用することになります。(複数YMDのうち何でソートするかは仕様なので、適切なものをご選択下さい) ※エラーになったのは、おそらく別名の付け方を誤っているのではないでしょうか? 試されたSQLを載せていただければ判断ができるかと思います。 2件であれば、GROPU BYする項目にYMDも追加してあげれば良いだけです。 |