回答

收藏

在SQL Server中执行嵌套case句子逻辑的最佳方法

技术问答 技术问答 212 人阅读 | 0 人回复 | 2023-09-14

我正在写一个SQL查询需要根据相当多的条件计算一些返回列。
: W; S" |( N/ I# l4 U1 M4 E2 E我目前正在使用嵌套case语句,但是它变得凌乱。有没有更好(更有条理和/或更易读)的方法?
2 W) H- W3 E" }  K(我用的是Microsoft SQL Server,2005)- k, I6 e+ ]+ X) D* z
一个简化的例子:6 ~: q& o6 ]: q: _
SELECT    col1,   col2,   col3,   CASE        WHEN condition         THEN            CASE                WHEN condition                                                                                                                                THEN                    CASE                         WHEN condition 2                                                                                                                                                                                                                                                                                                                                                                                                                                      THEN calculation                                                                                                                                       ELSE calculation2                                                                                                                                                                                                                                                                                                                                END                ELSE                    CASE                         WHEN condition 2                                                                                                                                                                                                                                                                                                                                                                                                                                      THEN calculation3 3                                                                                                                                                                                                                                                                                                                                ELSE calculation                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    END            END        ELSE             CASE                 WHEN condition                                                                                                                                THEN                     CASE                        WHEN condition 2                                                                                                                                                                                                                                                                                                                                                                                                                                       THEN calculation 55                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ELSE calculation6                                                                END                ELSE                    CASE                        WHEN condition 2                                                                                                                                                                                                                                                                                                                                                                                                                                       THEN calculation                                                                                                                               ELSE calculation 8                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      END            END                END AS 'calculatedcol1',            col4,   col5 -- etcFROM table               
+ W1 v% V8 m8 J" f8 z  P    解决方案:                                                               
9 _# D  ]$ g7 n: O) X/ U9 u                                                                你可以试试某个COALESCE例如:
9 P2 }' x+ \6 R% U- b; S. X; XSELECT COALESCE(  CASE WHEN condition1 THEN calculation1 ELSE NULL END, CASE WHEN condition2 THEN calculation2 ELSE NULL END, etc...)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则