SQL(Oracle)在没有包含静态数据的实际表格的情况下选择

问题描述:

我正在寻找在不查询实际表格的情况下运行(Oracle)SQL的可能性。 Here I found a tip with the DUAL table。这很不错。但是我正在寻找一个简短的解决方案来从“无处”选择MULTIPLE行。那可能吗?这是我能想到的,它做什么,我需要在最短的查询:SQL(Oracle)在没有包含静态数据的实际表格的情况下选择

Select 1, 'foo' FROM DUAL union 
Select 2, 'bar' FROM DUAL union 
Select 3, 'more stuff' FROM DUAL 

但是,如果我想在我的结果有更多的行,它变得非常不方便。有更短的路吗?就像

Select 1, 'foo'; 2, 'bar'; 3, 'more stuff' from dual 
or 
Select * from (1, 'foo') union (2, 'bar') union (3, 'more stuff') 

我知道,那不行,但你有什么想法吗?有没有简单的方法来转置查询的结果?例如:

Select transposed (1, 'foo', 2, 'bar', 3, 'more stuff') from dual 

我想保持金额“开销字符”在最低。

您可以使用connect by level产生更多的记录 - 是这样的:

select level, decode(level, 1,'foo', 2,'bar', 3,'more stuff') 
from dual connect by level <= 3 
+0

花式......从来没有使用过的解码(),但它工作正常,并保持“开销”到一个固定的数量。大!谢谢! – Sauer 2012-02-27 14:12:02

的情况下有多个列 - 那么这个作品,以及 -

select 
    REGEXP_SUBSTR (jango,'^[^#]*') as f1, 
    REGEXP_SUBSTR(REGEXP_REPLACE(jango,'^([^#]*#){1}', ''),'^[^#]*') as f2, 
    REGEXP_REPLACE(jango,'^([^#]*#){2}', '') as f3 
from 
    (
    Select decode(level, 
    1, 'foo#koo#joo', 
    2, 'bar#loo#too' , 
    3, 'more stuff#doo#dingo') as jango 
    from dual connect by level <= 20 
) 

下面是它的工作原理 - 的内部查询与上面相同我已经使用#添加了多个列 - 需要注意,它不是正则表达式系列中的一部分,否则我们需要将其转义。

Select decode(level, 
    1, 'foo#koo#joo', 
    2, 'bar#loo#too' , 
    3, 'more stuff#doo#dingo') as jango 
    from dual connect by level <= 20 

提供了以下 -

   Jango 
------------------- 
foo#koo#joo 
bar#loo#too 
more stuff#doo#dingo 

现在下面的一段从输出列选择 - '詹',什么都高达#

REGEXP_SUBSTR (jango,'^[^#]*') as f1, 

    O/p --> foo 

第二列我们删除内容第一列依次排列#

REGEXP_REPLACE(jango,'^([^#]*#){1}', '') 

    we get --> koo#joo 

现在第一步 - 获得第一个领域。

可以增加更多字段{1}。

+1

哦,男孩......对我来说太多了。但为+1的尝试:)谢谢! – Sauer 2013-11-14 09:50:53