如何在sql server中使用if语句和case

时间:2013-02-18 14:07:38

标签: sql

我的源表中有几列(CountryCodes,SubCodes),这些列的值是

Subcodes   CountryCodes  
100         1111
100         1566
100         2485
100         4586
101         4789
101         4756
101         7895     so on

我使用下面的查询,根据需要给我结果

select 
    CASE  WHEN C.SubCodes= '100' Then 
            CASE 
                WHEN C.CountryCodes IN ('5001','5048') THEN '001'
                WHEN C.CountryCodes = '5005' THEN '003'
                WHEN C.CountryCodes= '5018' AND SA.Amt IN(30,900) THEN '094'
                WHEN C.CountryCodes = '5018' AND SA.Amt IN(40,1200) THEN '095'
                WHEN C.CountryCodes = '5018' AND SA.Amt IN(50,1500) THEN '096'
                WHEN C.C.CountryCodes  = '5029' THEN '781'
                WHEN C.C.CountryCodes  = '5026' THEN '454'
                WHEN C.C.CountryCodes  = '5064' THEN '001'
                WHEN C.C.CountryCodes  = '5017' THEN '064' 
                               ELSE CAST('' AS CHAR(3))
            END 
    ELSE CAST('' AS CHAR(3))    
END
        END AS SomeCountryCoDes
现在,企业已经提出了新的要求。那是

CountryCode 5020位于SubCode 100.

现在我的要求是如果CountryCode 5020Subcode 100中,那么我需要将subCode的值从100更改为101.

上述案例陈述必须用if语句修改。

步骤1:如果CountryCode = 5020且子码= 100,那么Subcode必须是101 Else case statement

步骤2:在IF

之后必须遵循上述Case语句

注意:在Source表中,不应该对值进行处理。

1 个答案:

答案 0 :(得分:1)

为什么不只做一个案例而不是嵌套案例:

CASE WHEN C.SubCode = '100' AND C.CountryCode in ('5001', '5048') THEN '001'
  WHEN C.SubCode = '100' AND C.CountCode =- '5005' THEN '003'
  ...
  WHEN C.SubCode = '100' AND CountryCode = '5020' THEN '101'
  ...
END