【发布时间】:2013-05-15 12:31:00
【问题描述】:
我是 oracle 数据库的新手,我正在尝试使用 PIVOT 将行转换为列。我有以下表格..
table 1
solid solname
--------------
1 xxxxxx
2 yyyyyyy
table2
id name abbrv
----------------------------------
1 test db tdb
2 Prdocuiton db pdb
table3
id solId
-------------
1 1
1 2
1 3
1 4
1 5
1 7
1 8
1 9
1 22
1 23
1 24
1 25
2 26
2 27
1 28
1 29
1 32
1 33
1 34
1 35
1 36
1 37
3 38
1 39
1 40
1 43
1 44
表 3 是表 1 和表 3 的映射表。
我需要创建一个视图,其中包含 table2 中的列和每个 solname 的额外列。所以视图看起来像
id name abbrv xxxxxxx yyyyyyy
--------------------------------------------------
那么有没有办法在 oracle 数据库中使用 PIVOT 来做到这一点?
【问题讨论】:
-
如果你想创建一个视图,视图的定义需要在编译时修正。因此,如果您向
table1添加了另一条拖链,则无法将另一列动态添加到视图中。您可以重新创建视图,甚至可以编写一个使用动态 SQL 重新创建视图的存储过程。或者,您可以避免创建视图并可能执行其他可能是动态的操作——例如,返回SYS_REFCURSOR的存储函数,这将是完全动态的。但是那样你就没有视野了。您更喜欢哪种方法? -
嗨贾斯汀,感谢您的快速响应。我的情况是重新创建视图是更好的选择...所以请告诉我如何在这种情况下使用动态 SQL