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
答
的情况下有多个列 - 那么这个作品,以及 -
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
花式......从来没有使用过的解码(),但它工作正常,并保持“开销”到一个固定的数量。大!谢谢! – Sauer 2012-02-27 14:12:02