我需要对此CASE声明进行最后调整

时间:2013-05-20 10:36:47

标签: sql case

我有以下代码:

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需要反转标志。

感谢您的阅读。

2 个答案:

答案 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表达式(它计算一个值),而不是语句