2012-02-27 4 views
4

実際のテーブルを照会せずに(Oracle)SQLを実行する可能性を探しています。 Here I found a tip with the DUAL table。それはかなり良い。しかし、私は "どこからでも"複数の行を選択するための短い解決策を探しています。それは可能ですか?ここで私は必要なものない私は考えることができる最短のクエリ、次のとおりです。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 

"オーバーヘッド文字"を最低に保ちたいと思います。

答えて

6

あなたはより多くのレコードを生成するためにconnect by levelを使用することができます - のようなもの:場合

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

ファンシー... decode()を使用したことはありませんが、うまく動作し、オーバーヘッドが固定されています。すばらしいです!ありがとうございました! – Sauer

2

複数の列がある - これは同様に動作します - ここで

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 

ここで、次の作品は、出力列から選択 - 'ジャンゴ'、我々はコンテンツを削除する2列目#

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

    O/p --> foo 

件まで何でも1列目の#

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

    we get --> koo#joo 

最初のステップ - 最初のフィールドを取得します。

複数のフィールド{1}を増やすことができます。

+1

ああ、少年...あまりにも私のために。しかし、試して+1 :)ありがとう! – Sauer

関連する問題