0

我有以下代码:

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 需要符号反转。

感谢您的阅读。

4

2 回答 2

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
于 2013-05-20T10:40:24.397 回答
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是一个表达式(它计算一个值),而不是一个语句

于 2013-05-20T10:42:43.837 回答