0

「CASE DEFAULT」から複数のレコードを返す方法。

例えば:

Master.COLUMN1 IN (CASE '@InputString'
                    WHEN 'One' THEN 1
                    WHEN 'Two' THEN 2
                    WHEN 'THREE' THEN 3
                    ELSE (SELECT NUM_BER FROM TABLE1 WHERE COLUMN2 LIKE '%@InputString%')
                   END)

One を渡してみましたが、1 が返されます。どうすればこれを解決できますか??

4

3 に答える 3

2

次のように試すことができます:

column1 in (CASE '@InputString'
                    WHEN 'One' THEN 1
                    WHEN 'Two' THEN 2
                    WHEN 'THREE' THEN 3                    
                   END)
OR (column1 in (SELECT NUM_BER FROM TABLE1 WHERE COLUMN2 LIKE '%@InputString%')
    and '@InputString' not in ('One', 'Two', 'THREE'));

ここにsqlfiddleのデモがあります

于 2013-07-24T11:26:57.680 に答える
0

使用できますdecode

SQL> ed
Wrote file afiedt.buf

  1  with x as (
  2     select 'A' as string from dual union all
  3     select 'B' from dual union all
  4     select 'C' from dual union all
  5     select 'D' from dual
  6  )
  7  select     string , decode(string, 'A',1,'B',2,3) as string_out
  8* from       x
SQL> /

S STRING_OUT
- ----------
A          1
B          2
C          3
D          3
于 2013-07-24T13:40:27.273 に答える
0

ORA-01427 エラーが発生しています。これは、else パーツの選択クエリで複数の行が返されるためです。

以下のクエリが役立ちます。

WITH t AS
     (SELECT 1 string FROM dual
     UNION
     SELECT 2 string FROM dual
     UNION
     SELECT 1234 string FROM dual
     )
SELECT * FROM t
where t.string in ( case 'one' when 'one' then 1 else (select 1234 from dual) end);

output
_____
1

WITH t AS
     (SELECT 1 string FROM dual
     UNION
     SELECT 2 string FROM dual
     UNION
     SELECT 1234 string FROM dual
     )
SELECT * FROM t
where t.string in ( case 'two' when 'one' then 1 else (select 1234 from dual) end);

output
------
1234
于 2013-07-24T10:55:03.010 に答える