- PR -

Oracle SQL に関して

投稿者投稿内容
hiro
会議室デビュー日: 2004/09/04
投稿数: 4
投稿日時: 2004-09-04 13:50
Oracle SQL超初心者の者です。

以下のようなテーブルがあったとします。
EMPCDはvarchar型、ROLECDはnumber型です。

EMPCD   ROLECD
5001758   12
5001758   17
5002031   12
5002031   17
5001988   17

上記の表から、以下のようなViewを作成したいのですが。。。
(なお、EMPCD,ROLECD1,ROLECD2はvarchar型)

EMPCD     ROLECD1    ROLECD2
5001758     12        17
5002031     12        17
5001988     null       17

環境としましてはOracle8i及び9iを想定しております。
このようなことがOracle SQLで実現可能であれば是非とも教えていただきたいです。
宜しくお願い致します。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-09-04 14:02
ども、ほむらです。
--------
nullができるかはちょっとわからないけど
やりたいこと自体そのものは結合を使えばできると思いますよ。
ポイントは同じテーブルでつなげたい物をサブクエリの条件で指定するところです

以下 適当です。うごくかわかりません(^^;;;
コード:

(テーブル名はTBL , varcharは3桁と仮定)
SELECT T1.EMPCD, TO_CHAR(T1.ROLECD,'999') as ROLECD1, TO_CHAR(T2.ROLECD,'999') as ROLECD2
FROM TBL T1, (SELECT ROLECD FROM TBL WHERE EMPCD = T1.EMPCD) T2;


たぶんにたような物になると思いますけど。

# 参考になるのは。
# SAK Streets - SQL 開発言語資料
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3sql.htm

見直したらサブクエリがめちゃくちゃだったので修正ついでにコードタグを挿入

[ メッセージ編集済み 編集者: ほむら 編集日時 2004-09-04 14:05 ]
hiro
会議室デビュー日: 2004/09/04
投稿数: 4
投稿日時: 2004-09-04 14:14
ほむらさん、ありがとうございます。
確認してみます。
他にも方法があるようでしたら情報を頂きたく思います。
皆様、どうか宜しくお願い致します。



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-05 18:10
引用:

ほむらさんの書き込み (2004-09-04 14:02) より:


やってないのでアレですが、こんな風になりそうな?
コード:
EMPCD   ROLECD1 RORLECD2 
5001758 12       17
5001758 17       12
5001758 17       17
5001758 12       12
5002031 12       17
5002031 17       12
5002031 12       12
5002031 17       17
5001988 17       17




hiroさん>
 テーブル定義をもう一度見直した方が良くないでしょうか。同じEMPCDは、2つ以下しかないのでしょうか?
たるたる
会議室デビュー日: 2003/09/29
投稿数: 16
投稿日時: 2004-09-06 11:47
コード:

SELECT EMPCD
, DECODE(ROLECD, 12, '12', 'null') AS ROLECD1
, DECODE(ROLECD, 17, '17', 'null') AS ROLECD2
FROM TBL


ROLECDの数が決まっているのであれば、これで例のデータを取得できると思います。
要求仕様に合いますでしょうか?

[追加]
GROUPするの忘れていました・・・。
EMPCDでグループ化してROLECD1等は、MAX関数かなんかで取得してください。

[ メッセージ編集済み 編集者: たるたる 編集日時 2004-09-06 14:46 ]
Ru.F
会議室デビュー日: 2003/11/21
投稿数: 17
投稿日時: 2004-09-06 13:15
はじめまして、Ru.Fと申します。

・全件テーブルA
・12で絞り込んだテーブルB
・17で絞り込んだテーブルC

3つのビューを作成しA=B・A=Cで外部結合を行います。

BのROLECDをROLECD1に、CのROLECDをROLECD2に
それぞれ編集した結果を重複削除をすれば
上記の結果が得られるのではないでしょうか。

以上

--
Ru.F
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-09-06 21:34
ども、ほむらです。
--------
Jitta氏へ
>やってないのでアレですが、こんな風になりそうな?

僕もそんな気がします^^;;;
条件書き忘れたぁと思ったらRu.F氏の発言でさらに間違い発覚^^;;

んーMySQLあたりのデータベースイントールしちゃおうかなぁ。。。
すっかりSQLがくめない体に(涙

# FreeBSD勉強中なのでついでということで。。
# ↑まだシェルを勉強している段階(笑
hiro
会議室デビュー日: 2004/09/04
投稿数: 4
投稿日時: 2004-09-06 21:58
皆様、ご回答ありがとうございます。
皆様から頂いた内容をもとに確認を致しました。

>ほむらさんへ

ほむらさんのやり方でやってみましたが、Jittaさんがおっしゃるとおりの結果となりました。
別な方法がありましたら教えていただけますでしょうか。
宜しくお願い致します。

>Jittaさんへ

テーブル定義については現在の状態を維持したいと考えております。
EMPCDですが、2つ以上存在いたします。
最初に記述したデータにかんしては全データの一部を抜粋したものとなります。
何かよい案がありましたら、教えていただけますでしょうか。
宜しくお願い致します。

>たるたるさんへ

ROLECDの数はだいたい5〜10くらいになります。
[追加] で記述した部分に関して、試してみましたがうまくいきません。

SELECT EMPCD
, DECODE(ROLECD, 12, '12', 'null') AS ROLECD1
, DECODE(ROLECD, 17, '17', 'null') AS ROLECD2
FROM TBL GROUP BY EMPCD

上記の書き方では問題ありますでしょうか。

>Ru.Fさんへ

具体的なSQLを教えていただけると嬉しいです。
お手数をお掛けして申し訳ありません。
宜しくお願い致します。

スキルアップ/キャリアアップ(JOB@IT)