1

2つの値の間のデコードを「格納」するサブテーブルを作成しようとしています。これは、そのデコードを複数回使用する必要があるためです。これらが私のテーブルだとしましょう:

Table Person
Name    Number_name
Jeremy  One
Thomas  Two
Stephen Three

私の現在のSQLは次のようになります。

SELECT
    decode (number_name,
    'one',1,
    'two',2,
    'three',3,
    'four',4)
    num
    FROM person where name = 'Jeremy'
    and (some other condition)
UNION SELECT
    decode (number_name,
    'one',1,
    'two',2,
    'three',3,
    'four,4)
    num
    FROM Person
    where Name <> "Jeremy"
    and (some other condition)

私ができるようにしたいのは、次のようなものです。

SELECT num from my_temp_table where name = "Jeremy" and (some other condition)
union select num from my_temp_table where name <> "Jeremy" and (some other condition)
...

ここで、my_temp_tableはそのクエリ中に構築され(クエリの実行が終了すると存在しなくなります)、次のようになります。

Table my_temp_table
Name  num
One   1
Two   2
Three 3
Four  4

そして、うまくいけば、私は古い「すべてのデュアルユニオンから1つの名前、1つのnumを選択してください...」なしでこれを行うことができます。

これは実行可能ですか?

4

1 に答える 1

5

このWITH句は、あなたが説明しているものに最も近いもののように聞こえます。ただし、それには何らかの方法でデータを生成する必要があります。から選択するのDUALがおそらく最も簡単なオプションです

WITH my_temp_table AS (
  SELECT 'One' name, 1 num from dual union all
  SELECT 'Two', 2 from dual union all
  SELECT 'Three', 3 from dual union all
  SELECT 'Four', 4 from dual
)
SELECT *
  FROM my_temp_table 
       JOIN person ON (<<some join condition>>)
 WHERE <<some predicate>>

一連のクエリを結合したくないので、次のようにすることができます

WITH my_temp_table AS (
  select level num,
         initcap( to_char( to_date( level, 'J' ),
                           'JSP' )) name
    from dual
 connect by level <= 4
)
...
于 2012-05-24T02:43:08.583 に答える