3

我有两张桌子:

表 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 中的一行相关的所有内容都显示在一行中。从表 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 回答