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

これは、15 のデータベースをループします。ただし、データベースの 1 つがわずかに異なるビジネス ルールに従って動作するため、上記の例では、最後の 2 行を次のようにする必要があります。

THEN NL.DET_FINAL
ELSE -NL.DET_FINAL

つまり、符号が逆になります。

CASE ステートメントを希望どおりに動作させるにはどうすればよいですか? 英語では、THEN 句に到達すると、「DB_NAME() = 'Proteus' の場合は正にしない限り、数値を負にします」となります。

同様に、ELSE には符号反転が必要です。

読んでくれてありがとう。

4

2 に答える 2

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 に答える
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 に答える