-1

我在将此 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)

到目前为止,我想出的最好的东西在逻辑上不太合理..因为它是解码中的解码,这让我感到困惑。

这是我到目前为止所拥有的:

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
4

2 回答 2

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
于 2013-05-16T09:58:40.190 回答
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

您可以通过替换或使用其他结构CASE进行多次嵌套。conditionresultCASE

于 2013-05-16T10:05:25.377 回答