2013-02-18 114 views
0

我在我的源表數列(CountryCodes,子碼)和值的列如何使用if語句的情況下在SQL Server一起

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駐留在子碼100

現在,我的要求是,如果CountryCode 5020Subcode 100然後我需要子碼的值更改爲100〜101

上述case語句有用if語句表示讚賞。

第一步:如果COUNTRYCODE = 5020和子碼= 100則子碼必須是101否則case語句

第二步:上述情況語句後要遵循IF

注:在源表中的值不應該chnaged。

+0

不能使用IF語句SELECT內。 也許你的問題可以通過觸發器來解決。製作一個觸發器,檢查您的要求並應用必要的更改。 – KuramaYoko 2013-02-18 14:11:38

+1

這條線'當C.CountryCodes ='5020'那'000''爲什麼不用'100'而不是'000'? – 2013-02-18 14:12:55

+0

爲什麼你不能改變表中的值?如果你沒有改變價值,那麼你的病例陳述將如何工作 – DevelopmentIsMyPassion 2013-02-18 14:13:11

回答

1

你爲什麼不這樣做只是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 
+0

該值將被分配爲101,但不會隨條件循環 – 0537 2013-02-18 14:50:21

相關問題