2013-05-20 62 views
0

我有下面的代碼:我需要一個最終的調整到這個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 

通過15個數據庫這將循環。但是,數據庫的一個操作,以稍微不同的業務規則,並在上面的例子中,最後兩行必須

THEN NL.DET_FINAL 
ELSE -NL.DET_FINAL 

即符號相反。

如何獲得我的CASE語句以表達我想要的行爲?在英語中,當我遇到THEN子句時,它會「使得數字爲負數,除非DB_NAME()='Proteus'在這種情況下使其成爲正數」。

同樣,ELSE需要符號反轉。

謝謝您的閱讀。

回答

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表達 (它計算一個值),而不是聲明

+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