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

Posted

技术标签:

【中文标题】如何在sql server中使用if语句和case【英文标题】:How to use if statement along with case in sql server 【发布时间】:2013-02-18 14:07:38 【问题描述】:

我的源表(国家代码、子代码)中的列很少,这些列的值是

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

现在业务提出了新的要求。那就是

国家代码 5020 位于子代码 100 中。

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

上面的case语句必须用if语句修改。

Step1: 如果 CountryCode = 5020 and subcode= 100 那么 Subcode 必须是 101 Else case statement

Step2:上面提到的Case语句必须跟在IF后面

注意:源表中的值不应更改。

【问题讨论】:

您不能在 SELECT 中使用 IF 语句。也许您的问题可以通过触发器来解决。制作一个触发器来检查您的要求并应用必要的更改。 在这条线上WHEN C.CountryCodes = '5020' THEN '000' 为什么不用100 而不是000 为什么不能更改表中的值?如果你不改变价值,那么你的案例陈述将如何运作 你能不能把你写到现在的complete CASE显示出来,可能有一个简单的嵌套方法。 【参考方案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

【讨论】:

该值将被分配为 101 但它不会循环条件

以上是关于如何在sql server中使用if语句和case的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server判断语句(IF ELSE/CASE WHEN )

where 子句中的 case 语句 - SQL Server

SQL Server判断语句(IF ELSE/CASE WHEN )

如何在 SQL Server 的 Where 子句中使用 case 语句

SQL Server 2012:如何在 @Var 前后使用文字在 Case 语句中显示 @Var 结果

SQL里if语句和case语句有啥区别吗?哪个使用更高效?就是查询更优化?