- - PR -
SQL Server 2000 GROUP BY についてお聞きしたいですが。
1
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-11-25 09:41
SQL Server 2000 GROUP BY についてお聞きしたいですが。
いつもお世話になっております。 今回はGROUP BYについてお聞きしたいですが、 以下のようなデータが存在するとき @サブクエリを使わずに ある列をMAX()で取得する行の全てのカラムを取り出したい 以下の様な表で、 コード カラムA カラムB カラムC 01 10 20 30 01 40 50 60 01 70 80 90 →コード01のこの行の全てのカラムを取り出す 02 100 110 120 02 130 140 150 →コード02のこの行の全てのカラムを取り出す 03 ・・・・・・ 03 ・・・・・・ 03 ・・・・・・ 以下のSQL文で試してみましたが、コードでGROUP BYしていないみたいです(コード 01)の全ての行を取得してしまった。 SELECT コード, カラムA, MAX(カラムB), カラムC FROM [表] WHERE [カラムB] < @パラメータ GROUP BY [コード] コード, カラムA, カラムC ひとつのSQL文で、MAX()で取得した行の全てのカラムを取得する方法を教えて頂きたいですが よろしくおねがいいたします [ メッセージ編集済み 編集者: comeseesee 編集日時 2004-11-25 09:59 ] | ||||||||||||||||
|
投稿日時: 2004-11-25 10:50
サブクエリもしくはTransact SQLを使わなくてはできないのではないでしょうか。
| ||||||||||||||||
|
投稿日時: 2004-11-25 21:42
対コンピュータの時は何でもそうなのですが、コンピュータの言語(使いたい言語)の処理区分まで、やりたいことをブレークダウンして考えましょう。また、使いたい関数、式が、何をするものなのか、理解しましょう。
GROUP BY句は集計用の句なので、SELECT結果は必ずグループされるか、集計用関数が必要です。その辺でエラーが出たために、
としているのだと思います(エラーが出るような気もするが)。これでは「コード、カラムA、カラムC」でグループを作り、作ったグループからカラムBの最大値を取るという操作になるので、『コードでGROUP BYしていないみたいです』という結果、つまり、全行取得になります。グループ化していないのではなく、グループ化されていないように見えるグループ化をしているのです。 別所で同じような質問を目にしたことがありますが、その時は「1回の問い合わせで」だったと思います。その時の回答から、1回の問い合わせかつサブクエリを使わない、というのは無理なように思います。なぜ、サブクエリを使わないで、なのでしょう?
注:「GROUP BY句は集計用の句」 Books Onlineの、キーワードで「GROUP BY」を指定し、サブエントリの「行のグループ化」を選択する。「GROUP BY による行のグループ化」というドキュメントにある、次の意味。
| ||||||||||||||||
|
投稿日時: 2004-11-26 10:15
教えて頂いた通りSQL文を書いてみました。OKでした。
アドバイス、ありがとうございました。 | ||||||||||||||||
|
投稿日時: 2004-11-26 21:40
本当にOkでしたか?例えば、こんなデータは、どうなります?
また、最初のご質問にあった『サブクエリを使わず』を満足していませんよ? | ||||||||||||||||
|
投稿日時: 2004-11-29 14:08
今回の検索はカラムAとカラムCを考えなくてもいいです。Jitta様ご指摘のような場合はコードの「001」とカラムBの「80」を取得すればOKですが、ちょっと気になりますね。
コード カラムA カラムB カラムC 01 10 20 30 01 40 50 60 01 70 80 90 01 60 80 100 | ||||||||||||||||
1
