3

私は2つのテーブルを持っています:

表 A:

pk_id,
value

表 B:

pk_id,
key,
value,
fk_id

例: テーブル a:

1, value

例:テーブルb:

1, key1, value1, 1
2, key2, value2, 1
3, key3, value3, 1

などなど、すべてのキーを使用してテーブルを定義することはできません。別のアプリケーションからそのデータを取得し、常に同じであるとは限らず、変更される可能性があるためです。

私が必要としているのは、次のようなデータを表示するビューです (または、他の方法で可能であれば、私も気にしません)。

id, value, key1, key2, key3
1, value, value1, value2, value3

したがって、テーブル A の 1 つの行に接続されているすべてが 1 つの行に表示されます。ビューに表示されるテーブル B のキーを定義することは可能です。

前もって感謝します。

4

2 に答える 2

6

このクエリを試してください。これはあなたを助けるでしょう。

SELECT a.pk_id,a.value,
MAX(CASE WHEN b.key='key1' THEN b.value ELSE '0' END) AS key1,
MAX(CASE WHEN b.key='key2' THEN b.value ELSE '0' END) AS key2,
MAX(CASE WHEN b.key='key3' THEN b.value ELSE '0' END) AS key3
FROM table_b b 
LEFT OUTER JOIN table_a a on a.pk_id = b.fk_id
GROUP BY b.fk_id,a.pk_id,a.value
ORDER BY b.fk_id ASC
于 2013-06-18T09:10:33.797 に答える
2

ビューにはあらかじめ決められた数の列があるため、ビューを使用してこれを行うことはできません。次のような SQL を作成し、SYS_REFCURSOR を使用してクエリを実行する必要があります。

select a.pk_id,
       a.value,
       max(decode(b.key, 'key1', b.value)) key1,
       max(decode(b.key, 'key2', b.value)) key2,
       max(decode(b.key, 'key3', b.value)) key3
from   a
left join b on a.pk_id = b.fk_id
group by a.pk_id, a.value
;
于 2013-06-18T09:10:04.090 に答える