- 締切済み
group by句
以下のSQL文がoracle9iでOKで8iで通らないのですが、8iでも通るようになんとかできないでしょうか。 select a.val_Id, (select val_nm from tableA where val_id = a.val_id) as val_nm from tableA a group by a.val_id テーブルの内容 tableA( val_id number(1,0), val_code number(2,0), val_nm varchar(10) ) val_idとval_codeで一意となっています。 val_nmはval_idと一対一になっています。 要するにval_idに対応するval_nmも一緒に取得したいのですが、select句のサブクエリで8iの場合"group byの式ではありません"とおこられてしまいます。 ちなみに、今ここでは簡略化しているのですが本来は色なテーブルを結合しているので、単にgroup by val_id,val_nmとするのは無しでお願いいたします。 わかりにくいかとは思いますがお知恵をお貸しください。宜しくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kazuho_goo
- ベストアンサー率56% (34/60)
なかなか説明しづらい複雑なことを行いたいとようですね。ですが、このSQLを見る限り、 >val_nmはval_idと一対一になっています。 から select val_Id, val_nm from tableA でいいような気がしてしまいます。 他に良い方法があるような気がするのですが...。ご面倒だとは思いますが、全てのテーブル定義(フィールド必要部分のみ)と抽出条件を差し支えない程度に全て書いたほうがみなさんも答えやすいかと思います。
お礼
アドバイスありがとうございます。 質問はgroup by句で使用していないカラムの取得でしたのでご回答のSQLでは用を足さないのですが説明がわかりにくかったですね。すみません。 select a.val_id, a.val_nm from tableA a, (select val_id from tableA group by val_id) b where a.val_id = b.val_id で解決しました。お手数おかけしました。