【发布时间】: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 5020 在Subcode 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显示出来,可能有一个简单的嵌套方法。
标签: sql