- - PR -
Oracle SQL に関して
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-07 00:18
ども、ほむらです。
----------- hiro氏へ
僕の作ったSQLを改良すればできます。 きくだけじゃなくて自分のやっていることを 示していくようでなければ誰も答えてはくれなくなりますよ。 全然わからなくても作ろうとしたけどわからない部分を聞いてみるとか。。。 もちろん、下調べは必要ですけどね^^;; ところでhiroさんは、PIVOTテーブル(クロス集計)作りたいと思っているのでしょうか? oracleだと無理みたいですね。 横に並べるのではなくて縦にして処理できる方法を考えた方が早いような気がします。 ちなみに、 昔僕が大量のレコードを一つにまとめたときは主キーだけのレコードをINSERTして 該当する部分(フィールド)をUPDATEするという方法をとりました。 | ||||||||
|
投稿日時: 2004-09-07 09:25
責任をとりましてこんな感じです。 ただ、上記SQLで意味が分からない場合は、使用に注意してください。 hiroさんの思っている仕様にあっているかは、判断できませんので。 | ||||||||
|
投稿日時: 2004-09-07 10:11
こんにちは。
以下のようにも記述できたはず。。。 (一部ですみません。しかも試してないので。。。) SELECT A.EMPCD AS EMPCD, B.ROLECD AS ROLECD1 FROM ( SELECT EMPCD FROM TBL GROUP BY EMPCD ) A, ( SELECT EMPCD, ROLECD FROM TBL WHERE ROLECD = 12 ) B WHERE A.EMPCD = B.EMPCD (+) | ||||||||
|
投稿日時: 2004-09-07 10:56
こんにちは、Ru.Fです。
>hiro様 文章力がなくて申し訳ないです。 わからなかった点を御指摘いただけると私としても助かります。 私が考えていたのはQoo様のものと似ています。
※17については省略させていただきました。 他の皆様のレスを見て勉強になりました。 hiroさんも頑張ってください。 以上 -- Ru.F [ メッセージ編集済み 編集者: Ru.F 編集日時 2004-09-07 10:57 ] | ||||||||
|
投稿日時: 2004-09-07 17:48
RECORDCDの値は、12と17しかないのでしょうか?“一部”というのが気になります。あ、「2つ以上」と書いてあるか。その“2つ以上”を、どのように抽出したいのでしょうか。n個あるRECORDCDを、横に並べたいのでしょうか? Oracleの場合、列数が不定のものは抽出できません。DECODEを使うなら、何が入っているか、あらかじめ知っていなければなりません。それもおかしいですよね(増えたときはどう対応しますか?)。 つまり、表形式では格納(取り出し?)できない、ということです。そのため、テーブル定義、データ形式を見直すか、それができないならSQLではなく、バックエンドの言語で何とかするしかありません。 | ||||||||
|
投稿日時: 2004-09-07 22:38
皆様ご回答ありがとうございます。
>ほむらさんへ 申し訳ありません。 今後は自分が行ってきたことについても詳細に説明を加えます。 PIVOTテーブルというものがどうゆうものかよく分かりませんので、なんともいえませんが。 最初に投稿致しました内容を実現できればと考えております。 5〜10個(列数は分かっている)あるRECORDCDを列にとり、 行に重複なしのEMPCDをとりたいと 考えております。 説明になっていますでしょうか? >たるたるさんへ 確認いたしましたところ、うまくいきました。 Jittaさんが指摘されたように、列数が決まっておりますので、 この方法でよいのではないかと認識しております。 ありがとうございました。 >Qooさん、Ru.Fさんへ 確認してみます。 >Jittaさんへ RECORDCDの値は、12と17以外にも存在いたします。 n個あるRECORDCDを、横に並べたいということになります。 列数は不定ではありません。 何が入っているかあらかじめ把握しております。 既存に存在するデータをただ並べ替えるような形式と思って頂いて結構です。 この場合は、問題ありませんでしょうか? 言葉足らずで申し訳ございません。 | ||||||||
|
投稿日時: 2004-09-09 22:55
文字列の「最大値」「最小値」って、とれるんですか?!って、思ったら、Oracleは通りますね。PostgreSQLは落ちました。 |