- PR -

Oracleのselect文で教えてください

1
投稿者投稿内容
いち
会議室デビュー日: 2003/06/09
投稿数: 12
投稿日時: 2007-11-05 14:17
下記のようなテーブルがあります。
CREATE TABLE 在庫tbl
(
品名 CHAR(15),
場所 CHAR(15),
数量 NUMBER(11,3)
)
データは以下の内容がはいっているとします。
品名 場所 数量
A 001 1
A 002 2
A 003 3
B 001 1
B 004 2
C 005 1
これを、以下の様にselectするSQL文を教えて頂けないでしょうか。
品名 場所1 数量1 場所2 数量2 場所3 数量3
A 003 3 002 2 001 1
B 004 2 001 1 null null
C 005 1 null null null null
※横軸は数量の多い順に場所1→場所3まで

rownumを使用すればできるのかと思い、考えてみたのですが、
できませんでした。
どなたか、教えていただけますようにお願いします。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2007-11-05 14:33
 このテーブルのキーは何?
もしかして品名ですか?
SELECT文を教えてという以前に根本的におかしいです。
もしこんなテーブルが存在したら即効ドロップですよ。
いち
会議室デビュー日: 2003/06/09
投稿数: 12
投稿日時: 2007-11-05 14:36
キーは品名と場所です。
一つの場所に複数の品名を管理することができます。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2007-11-05 15:16
引用:

いちさんの書き込み (2007-11-05 14:36) より:
キーは品名と場所です。
一つの場所に複数の品名を管理することができます。


 複数の項目でキーになるのは構いませんが、
通常、キーで使用する項目は商品コード等であり、
品名のような名称は使用しません。
今の時期だから新人研修じゃないと思いますが、
このテーブルは業務システムで使っているんですか?
まあそんなの有得ないと思いますが・・・。

 ちなみに、一つのテーブルに別名を付けて、
それを複数指定すればやりたいと思われることは出来るはず。
別にオラクルがどうとかっている次元の話じゃない。
上で言っていることも全てそう。
SQL文の基本書でも読めば書いてあるはず。
このレベルの事は殆どのエンジニアは自然に理解すると思います。
いち
会議室デビュー日: 2003/06/09
投稿数: 12
投稿日時: 2007-11-05 15:47
初歩的な質問で申し訳御座いませんでした。
わかりやすくと思い、品目コードを品名としていました。
余計混乱させたみたいで、申し訳御座いませんでした。
一応、以下のようなやりかたで、なんとかできそうなことがわかりました。
アドバイス等ご記入の方々にありがとう御座いました。
−−−−−−−−−−−以下、SQL文−−−−−−−−−−−
select 在庫1.品名,在庫1.場所,在庫1.在庫数,在庫1.row_number
,在庫2.場所,在庫2.在庫数,在庫2.row_number
from
(
select 在庫1.品名,在庫1.場所,在庫1.在庫数,t91_1.row_number
from
(
select 品名,場所,在庫数,row_number
from
(
select 品名,場所,在庫数,row_number() over (partition by 品名 order by 在庫数 desc) as row_number
from 在庫tbl
where 在庫数<>0
)
where row_number <= 2
)在庫1
where row_number=1
)在庫1
,
(
select 在庫2.品名,在庫2.場所,在庫2.在庫数,t91_2.row_number
from
(
select 品名,場所,在庫数,row_number
from
(
select 品名,場所,在庫数,row_number() over (partition by 品名 order by 在庫数 desc) as row_number
from 在庫tbl
where 在庫数<>0
)
where row_number <= 2
)在庫2
where row_number=2
)在庫2
where 在庫1.品名=在庫2.品名(+)
1

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