2016-01-26 35 views
1

目前,我正在使用类似于以下语句的内容来创建类似结构的临时表。Oracle - 从双重选择常量值作为M x N表

WITH CONFIGURATION AS (
    SELECT 'some blah value' AS BLAH , 'some blee value' AS BLEE FROM DUAL 
    UNION 
    SELECT 'some other blah value' AS BLAH, 'some other blee value' AS BLEE FROM DUAL 
) 
SELECT 'BLAH BLAH' FROM CONFIGURATION C, SOME_OTHER_TABLE T WHERE C.BLAH=T.BLAH 

,我要面对这里的问题是,当我要实现的10x7表结构相同结构的查询变得相当大而凌乱。

有没有更简单的方式来实现这一目标使用DUAL或任何其他系统表,而不必使用UNION并重写SELECT FROM DUAL多次?

注:

  • 我有这个数据库没有DDL许可。否则,我就已经创建了一个表,实现这一目标已经
  • 数据库版本的Oracle 11g的M×N的结构里面
  • 的数据是要在性质上
不规则
+0

考虑到您拥有DML权限,这是一个很好的方法。如果格式正确,不再需要多长时间才能读取和维护。 – Incognito

+0

使用Oracle子查询因子分析,可以在WITH子句中使用多个唯一语句,并通过使用别名和逗号将它们“菊花链”连接在一起。更好地使用别名应该可以更容易地管理你的WITH内容。看看这个网站的例子:http://www.dba-oracle.com/t_sql99_with_clause.htm – DanK

+1

使用'UNION ALL'在'select .. from dual'语句而不是'UNION'中,以避免不必要的操作各种/ distincts。另外,如果你的数据无法使用@Mat建议的连接,并且你不能在数据库上执行DDL(并且没有你可以插入的相应表),那么你就不能使用'UNION ALL'来模拟你的“数据表”。 – Boneist

回答

2

也许这样?

select * from (
    select trunc((rownum - 1)/3) as x, mod(rownum - 1, 3) as y, column_value 
    from table(dbmsoutput_linesarray(
      'some blah value' , 'some blee value', 'some bluuu value', 
      'some other blah value', 'some other blee value', 'some other bluuu value', 
      'blah 5', 'blee 5', 'bluu 5', 
      'blah 6', 'blee 6', 'bluu 6' 
       )) 
) 
pivot (
    max(column_value) 
    for y in (0 as blah, 1 as blee, 2 as bluuu) 
) 
+0

辉煌。这正是我所期待的。 –

+0

这不仅是干净的,而且当数据集很大时,它也大大减少了查询的大小。谢谢。 –

相关问题