2009-07-24 4 views
1

質問があります。値のリストのみを作成してどのように結果セットを作ることができますか?たとえば、私は、このような値があります:('1','2','3') を、私は、このようなテーブルを返すSQL作りたい:結果セットの作成方法( '1'、 '2'、 '3')?

1 
2 
3 

感謝を。

[編集]

間違って質問して申し訳ありません。 実際には整数は含まれていませんが、文字列が含まれています。 私は現在、( 'aa'、 'bb、' cc ')のように必要です。

[/編集]

+0

これらの値を既存のテーブルから取り出すか、それを格納するテーブルを作成しますか? – acrosman

+0

私はtheese値と交差を作りたいと思います。実際には、テーブルにはないすべての値を検索したいが、それは対応するリストに存在する。 私はoracleを使用しています –

答えて

1

私が見つけた最良の方法は、XMLを使用しています。


SELECT items.extract('/l/text()').getStringVal() item 
FROM TABLE(xmlSequence(
     EXTRACT(XMLType(''|| 
     REPLACE('aa,bb,cc',',','')||'') 
      ,'/all/l'))) items; 

私は信用できるかもしれませんが、アラスカ:http://pbarut.blogspot.com/2006/10/binding-list-variable.html

基本的には、リストをxmldocumentに変換してから解析します。

1

最も簡単な方法は、十分な行を持つことが保証されているテーブルを乱用することです。

-- for Oracle 
select rownum from tab where rownum < 4; 

これが可能でない場合は、Oracle Row Generator Techniquesをご覧ください。

私はこの1つは(10グラムが必要です)好き:私は、様々なデータベースシステム(だけでなく、SQLデータベース)に使用しました

select integer_value 
from dual 
where 1=2 
model 
    dimension by (0 as key) 
    measures  (0 as integer_value) 
    rules upsert (integer_value[ for key from 1 to 10 increment 1 ] = cv(key)) 
; 
1

1つのトリックはちょうど最初の100または1000を含むテーブルを持って、実際にあります整数。このようなテーブルは、プログラム的に作成するのは非常に簡単です、そして、あなたのクエリは、次のようになります。

SELECT value FROM numbers WHERE value < 4 ORDER BY value 

あなたが同様の目的のためにたくさんのテーブルを使用することができます。

+1

あなたはおそらくORDER BY – Thilo

+0

を追加したいと思っています。 –

3

カンマ区切りリストを使用し、任意の数の実際の行を生成するSQL文を作成する場合は、入力を分割するPL/SQLファンクションをコールする表関数を使用するのが実際的な方法ですその要素を別々の行として返します。

Check out this link intro to table-functions。また

、あなたが行うことができ、あなたのクライアントでプログラムのSQLステートメントを構築することができる場合:

SELECT 'aa' FROM DUAL 
UNION 
SELECT 'bb' FROM DUAL 
UNION 
SELECT 'cc' FROM DUAL 
+0

UNIONは素晴らしいソリューションです。しかし、よりエレガントなものが存在すべきだと思った。ありがとう! –

+0

また、DECODEを使用して実行できることがわかりました –

+0

値が異なることがわかっている場合は、UNION ALLを使用することをお勧めします。 –

関連する問題