電子書籍の厳選無料作品が豊富!

(1)の様なテーブルから結果を(2)の様にしたいのですが
どのようなSQLを書いたら表示できるのかわかりません。
アドバイスなどをお願い致します。
(新たにView等を作成するなどでもかまいません。)

(1)dept_id / item_id / day / time (カラム)
1111 / 0001 / 20090101 / 60 (レコード1)
1111 / 0001 / 20090102 / 30 (レコード2)
1111 / 0002 / 20090101 / 40 (レコード3)
1112 / 0001 / 20090101 / 30 (レコード4)

(2)dept_id / item_id / time1 / time2
1111 / 0001 / 60 / 30
1111 / 0002 / 40 /
1112 / 0001 / 30 /

A 回答 (2件)

10g以降ならmodel句も使えます。


利点はなんとなくカッコいいところです。

select dept_id,item_id,item1,item2
from tab
model return updated rows
partition by (dept_id,item_id)
dimension by (Row_Number() over(partition by dept_id,item_id order by dept_id,item_id) as rn)
measures(time as item1,time as item2)
rules(item2[1] = item2[2])
order by dept_id,item_id


-- 結果 --
DEPT_IDITEM_IDITEM1ITEM2
111100016030
1111000240
1112000130
    • good
    • 0

たとえば……



select
dept_id, item_id,
max(case when rn = 1 then time else null end) as time1,
max(case when rn = 2 then time else null end) as time2
from (
select
dept_id, item_id, time,
row_number() over (partition by dept_id, item_id order by day) as rn
from t
)
group by dept_id, item_id
order by dept_id, item_id

のようになります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!