DECODE到CASE声明

时间:2013-05-16 09:38:16

标签: sql case decode

我在将此DECODE修改为CASE语句时遇到了一些麻烦。

DECODE(DECODE(pa.postCode_pt1 || ' ' || pa.postCode_pt2,'L9 3DF', 'ZZ99 9ZZ', 'CV23 8AP', 'ZZ99 9ZZ', 'WR11 8TZ', 'ZZ99 9ZZ', postCode_pt1 || ' ' || pa.postCode_pt2),'ZZ99 9ZZ','',pa.address_l1)

迄今为止我提出的最好的东西是不合逻辑的......因为它是DECODE中的一个DECODE,这让我感到困惑。

这是我到目前为止所做的:

CASE WHEN pa.postCode_pt1 + ' ' + pa.postCode_pt2='ZZ99 9ZZ' (
CASE WHEN pa.postCode_pt1 + ' ' + pa.postCode_pt2='L9 3DF' THEN 'ZZ99 9ZZ'
     WHEN pa.postCode_pt1 + ' ' + pa.postCode_pt2='CV23 8AP' THEN 'ZZ99 9ZZ'
     WHEN pa.postCode_pt1 + ' ' + pa.postCode_pt2='WR11 8TZ' THEN 'ZZ99 9ZZ'
     ELSE pa.postCode_pt1 + ' ' + pa.postCode_pt2) THEN '' 
  ELSE pa.address_l1
END AS Address_Line_1

2 个答案:

答案 0 :(得分:2)

您可以尝试此查询。

select case when  case when pa.postCode_pt1 + ' ' + pa.postCode_pt2='L9 3DF'then 'ZZ99 ZZ' else 'WR11 8TZ' end = 'ZZ99 9ZZ' then ' ' else pa.address_l1 end  new_value from dual

答案 1 :(得分:2)

未经测试,但您应该明白这一点:

case when
(case
when pa.postCode_pt1 || ' ' || pa.postCode_pt2 in ('L9 3DF','CV23 8AP','WR11 8TZ') 
then 'ZZ99 9ZZ'
else postCode_pt1 || ' ' || pa.postCode_pt2 end)
= 'ZZ99 9ZZ' then '' else pa.address_l1 end

嵌套case语句的语法:

case 
    when A=B then 
      (case 
        when C=D then 1
        when E=F then 2
        else 3 
       end)
    when G=H then
      (case 
        when I=J then 4
        when K=L then 5
        else 6
       end)
     else 7
end

我认为这也应该没有括号,我添加()只是为了更好的定位。

CASE的一般结构是([]是可选的):

CASE WHEN condition THEN result [WHEN...][ELSE result] END

通过将CASEcondition替换为其他result结构,您可以多次嵌套CASE