具有许多WHEN子句的案例结构

时间:2013-07-23 04:38:33

标签: sql sql-server tsql

我有一个表(TestTable),其数据如下

enter image description here

我需要根据ColA,Age,Gender列值创建一个计算列“Band”。如下所示

 CASE

 WHEN ColA='A' AND AGE=1 AND GENDER='M' THEN 'BANDX90'
 WHEN ColA='A' AND AGE=1 AND GENDER='F' THEN 'BANDX91'
 .
 .
 .
 .
 WHEN ColA='A' AND AGE=65 AND GENDER='M' THEN 'BANDX18'
 WHEN ColA='A' AND AGE=65 AND GENDER='F' THEN 'BANDX19'
 WHEN ColA='B' AND AGE=1  AND GENDER='M' THEN 'BANDX39'
 WHEN ColA='B' AND AGE=1  AND GENDER='F' THEN 'BANDX56'  
 ELSE NULL
 END AS BAND           

注意:我的用户/客户在excel表中为不同 WHEN条件提供了BAND值('BANDX90',....)。

上述CASE方法的缺点是,如果我在表中有500条记录,那么我必须使用CASE 'WHEN' STMT 500 TIMES,这不是一个好的选择。

在计算列时,是否有人遇到过相同的情况?如果是,请分享您的建议!

我们还有其他方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:5)

  

我的用户/客户为excel表中的不同WHEN条件提供了BAND值('BANDX90',....)。

我认为将这个 BAND值信息放在table(BandValues)中并使用标题

很容易
Col1 Age Gender Band_Value

不是逻辑:

Update T
Set T.Band = B.Band_Value
From Testtable T
INNER JOIN BandValues B
ON T.Col1=B.Col1
AND T.Age=B.Age
AND T.Gender=B.Gender

答案 1 :(得分:1)

如果BANDX__没有逻辑,那么您最好使用表格中的列作为Then语句。

<强> Here is SQLFiddelDemo

以下是显示我观点的图片:

enter image description here