- ベストアンサー
複数のデータ抽出条件について
- Oracleのテーブルから複数のデータ抽出条件について考えています。条件に基づいてデータを絞り込む方法を教えてください。
- nendo=2004,2005、kaisha、cust、seihinが同一のデータがある場合、一つに絞り込めない場合はどうすれば良いですか?
- ctgが小さいものを抽出するためのPL/SQLの記述方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
分析関数が使えるバージョンなら、PL/SQLを使わなくても 処理できる感じです。 SQL> select * from TARGET; NEN KAISHA CUST SEIHIN CODE QTY CTG ----- ------ ---- ------ ---- ----- --- 2004 A AC ITEMA 1 100 2 2004 A AC ITEMA 2 100 1 2005 A AC ITEMA 1 200 1 2005 A AC ITEMA 2 300 2 2004 B BC ITEMB 1 100 3 2004 B BC ITEMB 2 100 2 2005 B BC ITEMB 2 200 1 2004 C CC ITEMC 2 200 2 2004 C CC ITEMC 1 100 1 9 rows selected SQL> select * from TARGET 2 where 3 (nen,kaisha,cust,seihin,ctg) in 4 (select 5 case when COUNT2004=1 then 2004 when COUNT2005=1 then 2005 else MIN_NEN end nen, 6 kaisha,cust,seihin, 7 case when COUNT2004=1 then MAX2004 when COUNT2005=1 then MAX2005 else MIN_CTG end ctg 8 from 9 (select 10 kaisha,cust,seihin, 11 sum(case when nen=2004 and R1=1 then 1 else 0 end) COUNT2004, 12 max(case when nen=2004 and R1=1 then ctg else NULL end) MAX2004, 13 sum(case when nen=2005 and R1=1 then 1 else 0 end) COUNT2005, 14 max(case when nen=2005 and R1=1 then ctg else NULL end) MAX2005, 15 min(decode(R2,1,ctg)) MIN_CTG, 16 min(decode(R2,1,nen)) MIN_NEN 17 from 18 (select 19 nen,kaisha,cust,seihin,ctg, 20 rank() over(partition by kaisha,cust,seihin,nen order by qty desc) R1, 21 row_number() over(partition by kaisha,cust,seihin order by ctg) R2 22 from TARGET) 23 group by kaisha,cust,seihin)); NEN KAISHA CUST SEIHIN CODE QTY CTG ----- ------ ---- ------ ---- ----- --- 2004 C CC ITEMC 2 200 2 2005 A AC ITEMA 2 300 2 2005 B BC ITEMB 2 200 1