我有以下代码:
SELECT CASE WHEN (ACCT.NMAJORHCODE IN ('7','16')
AND DET_TYPE NOT IN ('ACR', 'ADR', 'CRN'))
OR (DET_TYPE IN ('ADR', 'CRN') AND CR.NMAJORHCODE < 4 AND ACCT.NTYPE NOT IN ('A', 'X'))
THEN -NL.DET_FINAL
ELSE NL.DET_FINAL
这将遍历十五个数据库。但是,其中一个数据库操作的业务规则略有不同,在上面的示例中,最后两行需要
THEN NL.DET_FINAL
ELSE -NL.DET_FINAL
即标志相反。
如何让我的CASE语句表达我想要的方式?在英语中,当我达到THEN条款时,它将“使数字为负,除非DB_NAME()='Proteus',在这种情况下使其成为正面”。
同样,ELSE需要反转标志。
感谢您的阅读。
答案 0 :(得分:1)
您可以嵌套case
,例如:
THEN CASE DB_NAME() WHEN 'PROTEUS' THEN -NL.DET_FINAL ELSE NL.DET_FINAL END
ELSE CASE DB_NAME() WHEN 'PROTEUS' THEN NL.DET_FINAL ELSE -NL.DET_FINAL END
END
答案 1 :(得分:1)
我将它移到一个单独的表达式中:
SELECT CASE WHEN (ACCT.NMAJORHCODE IN ('7','16')
AND DET_TYPE NOT IN ('ACR', 'ADR', 'CRN'))
OR (DET_TYPE IN ('ADR', 'CRN') AND CR.NMAJORHCODE < 4 AND ACCT.NTYPE NOT IN ('A', 'X'))
THEN -NL.DET_FINAL
ELSE NL.DET_FINAL END * CASE WHEN DB_NAME() = 'PROTEUS' THEN -1 ELSE 1 END
(并且,关于术语的说明 - CASE
是表达式(它计算一个值),而不是语句)