- - PR -
2レコードを1行で表示する(?)方法
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-08 02:22
・環境:WebLogic、Struts、Oracleで開発。
DB上、データがテーブルAに次のように入っているとして、 クラス名 性別 国語平均点 算数平均点 -------- ----- -------- -------- クラスA 男 80 90 クラスA 女 90 70 クラスA 全 85 80 クラスB 男 70 80 クラスB 女 80 80 クラスB 全 75 80 クラスC 男 60 90 クラスC 女 80 70 クラスC 全 70 80 クラスD 女 90 90 クラスD 全 90 90 このようなデータを次のようにWebで、 クラス 男:国語平均 女:国語平均 -------- ------------ ---------- クラスA 80 90 クラスB 70 80 クラスC 60 80 クラスD − 90 表示したい場合、SQLで、 select a.クラス, a.国語平均点 from テーブルA a where a.性別 in ('男','女') order by a.クラス名 asc, a.性別 asc のように取得し、Javaで値を判断して1つ1つ指定の場所へ 入れていく処理になってしまうのでしょうか。他にいいやり方みたいなことが あれば教えていただきたく思っております。 宜しくお願いします。 | ||||||||
|
投稿日時: 2004-09-08 08:59
SQLで
select a.クラス, a.国語平均点, b.国語平均点 from テーブルA a,テーブルA b where a.性別 = '男' and b.性別 = '女' and a.クラス名 = b.クラス名 order by a.クラス名 asc とやる方法もあります。 | ||||||||
|
投稿日時: 2004-09-08 10:10
クラスDだけ、女しかいないクラスです。
このクラスを出すためにはどうすればいいのでしょう? | ||||||||
|
投稿日時: 2004-09-08 10:32
あいつーです。
SQLで言うところの外部結合を使ってみては如何でしょうか。 #というか、これってJavaの話題ですか? | ||||||||
|
投稿日時: 2004-09-08 10:50
Javaというより、明らかにオラクルの問題なので、
Database Expertの方に投稿した方が良かったかもしれませんね・・・。 下記のどちらかの方法でいけませんか? 1.外部結合 SELECT 女.クラス,男.国語平均点,女.国語平均点 FROM (SELECT * FROM テーブルA WHERE 性別='男') 男, (SELECT * FROM テーブルA WHERE 性別='女') 女 WHERE 女.クラス=男.クラス(+) 2.UNIONで付け足す SELECT 女.クラス,男.国語平均点,女.国語平均点 FROM (SELECT * FROM テーブルA WHERE 性別='男') 男, (SELECT * FROM テーブルA WHERE 性別='女') 女 WHERE 女.クラス=男.クラス UNION SELECT クラスD.クラス,'-' 国語平均点,クラスD.国語平均点 FROM (SELECT * FROM テーブルA WHERE クラス='クラスD') クラスD 最近、オラクルは触っていないので、ボケているかも・・・。 | ||||||||
|
投稿日時: 2004-09-08 20:04
takuさんの方法でしたら
”クラスDだけ、女しかいないクラスです。” と分かっている場合は良いですが、 ”クラス何とかは、男しかいないクラスです。” もあった場合は、対応できなくなってしまいます。 この場合、DECODE、UNION ALLを使えばできると思います。 ※-1は該当無しの意味で使用。 DECODEの例
UNION ALLの例
しかし、これが良い方法かわかりません。 DB依存になる場合もありますし・・・。 再利用性も低くなりますし・・・。 | ||||||||
|
投稿日時: 2004-09-08 20:13
個人的には、SQLで頑張るより最初の書き込みにあった、
このやり方で実装するほうがいいと思います。 | ||||||||
1
