1列のテーブルがあり、以下のデータがあります
Status
a1
i
t
a2
a3
選択クエリに次の結果を表示したい
Status| STATUSTEXT
a1 | Active
i | Inactive
t | Terminated
a2 | Active
a3 | Active
私が考えることができる一つの方法は、select queryでSwitch When式を使っていた
SELECT
status,
CASE status
WHEN 'a1' THEN 'Active'
WHEN 'a2' THEN 'Active'
WHEN 'a3' THEN 'Active'
WHEN 'i' THEN 'Inactive'
WHEN 't' THEN 'Terminated'
END AS StatusText
FROM stage.tst
私が書く必要がない場所でこれを行う他の方法はありますか Active Statusに対して式が3回の場合 そして、全体のアクティブステータスを1つの式で確認できますか?
IN
句を使用できます
何かのようなもの
SELECT
status,
CASE
WHEN STATUS IN('a1','a2','a3')
THEN 'Active'
WHEN STATUS = 'i'
THEN 'Inactive'
WHEN STATUS = 't'
THEN 'Terminated'
END AS STATUSTEXT
FROM
STATUS
このデモを見てください
もちろん...
select case substr(status,1,1) -- you're only interested in the first character.
when 'a' then 'Active'
when 'i' then 'Inactive'
when 't' then 'Terminated'
end as statustext
from stage.tst
しかし、このスキーマに関しては、いくつか心配なことがあります。第一に、あなたが何かを意味するコラムを持っているならば、最後に数字を追加することは必ずしも行くための最善の方法ではない。また、ステータスの数によっては、この列を別のテーブルへの外部キーに変換することを検討してください。
あなたのコメントに基づいて、あなたは間違いなくこれを外部キーに変えたいのです。例えば
create table statuses ( -- Not a good table name :-)
status varchar2(10)
, description varchar2(10)
, constraint pk_statuses primary key (status)
)
create table tst (
id number
, status varchar2(10)
, constraint pk_tst primary key (id)
, constraint fk_tst foreign key (status) references statuses (status)
)
あなたの質問はそれからになります
select a.status, b.description
from tst a
left outer join statuses b
on a.status = b.status
これが SQL Fiddle です。
CASE
のELSE条件を使うように書き直すことができます。
SELECT status,
CASE status
WHEN 'i' THEN 'Inactive'
WHEN 't' THEN 'Terminated'
ELSE 'Active'
END AS StatusText
FROM stage.tst
decodeを使用する方が簡単です。
SELECT
status,
decode ( status, 'a1','Active',
'a2','Active',
'a3','Active',
'i','Inactive',
't','Terminated',
'Default')STATUSTEXT
FROM STATUS
SELECT
STATUS,
CASE
WHEN STATUS IN('a1','a2','a3')
THEN 'Active'
WHEN STATUS = 'i'
THEN 'Inactive'
WHEN STATUS = 't'
THEN 'Terminated' ELSE null
END AS STATUSTEXT
FROM
stage.tst;
CASE TO_CHAR(META.RHCONTRATOSFOLHA.CONTRATO)
WHEN '91' AND TO_CHAR(META.RHCONTRATOSFOLHA.UNIDADE) = '0001' THEN '91RJ'
WHEN '91' AND TO_CHAR(META.RHCONTRATOSFOLHA.UNIDADE) = '0002' THEN '91SP'
END CONTRATO,
00905. 00000 - "missing keyword"
*Cause:
*Action:
Erro na linha: 15 Coluna: 11
次のような構文でうまくいきます。
....
where x.p_NBR =to_number(substr(y.k_str,11,5))
and x.q_nbr =
(case
when instr(substr(y.m_str,11,9),'_') = 6 then to_number(substr(y.m_str,11,5))
when instr(substr(y.m_str,11,9),'_') = 0 then to_number(substr(y.m_str,11,9))
else
1
end
)
確認できるのはステータスの最初の文字だけです。これには部分文字列関数を使います。
substr(ステータス、1,1)
あなたの場合は過去です。