単一のCASE
ステートメントから複数の列(この場合は被保険者コード、被保険者名)を取得しようとしています。
次のクエリが試行されましたが、insuredcodeとinsurednameの両方を1つの列として連結します。
このようなCASE
ステートメントから正確に2列を返すための正しい構文は何ですか?
select
case
when a.policyno[2] in ('E', 'W') then c.insuredcode || c.insuredname
else b.insuredcode || b.insuredname
end
from prpcmain a
left join prpcinsured_1 b on b.proposalno=a.proposalno
left join prpcinsured_2 c on c.proposalno=a.proposalno
where a.policyno in (select policyno from policyno_t);
CASE
ステートメントは、複数の列ではなく単一の列のみを返すことができます
これを行うには、2つの異なるCASE
ステートメントが必要です。
select
case
when a.policyno[2] in ('E', 'W') then c.insuredcode
else b.insuredcode
end as insuredcode ,
case
when a.policyno[2] in ('E', 'W') then c.insuredname
else b.insuredname
end as insuredname
from prpcmain a
left join prpcinsured_1 b on b.proposalno=a.proposalno
left join prpcinsured_2 c on c.proposalno=a.proposalno
where a.policyno in (select policyno from policyno_t);
私は少し速いかもしれない何か他のものを提案することができます:
SELECT s.insuredcode,s.insuredname FROM (
SELECT a.policyno,b.insuredcode,b.insuredname
FROM prpcmain a
left join prpcinsured_1 b on b.proposalno=a.proposalno
WHERE a.policyno[2] not in ('E', 'W')
UNION ALL
SELECT a.policyno,c.insuredcode,c.insuredname
FROM prpcmain a
left join prpcinsured_2 c on c.proposalno=a.proposalno
WHERE a.policyno[2] in ('E', 'W')
) s
where s.policyno in (select policyno from policyno_t);
あなたの質問に関しては、 @ Prdp はあなたがする必要があることを示しています。
これは、任意の言語のif/else条件に似ており、条件をWhenステートメントで定義できます。trueの場合、SQLはThenステートメントを実行し、そうでない場合は実行します- Else part、以下で説明します:
Select
CASE
WHEN (cs.ResultSubmitToHOD = 1) THEN 'HOD'
WHEN (cs.ResultSubmitToExamDep = 1) THEN 'Exam'
ELSE 'Teacher'
END AS ResultSubmitStatus
From dbo.CourseSection as cs