1

次の SQL を実行していますが、0 の場合は常にヒットするようです。

 select 
ccy.numberofdecimals,
ABS(round(ts.TRADECCY1AMOUNT, 2)),

CASE 
WHEN CCY.NUMBEROFDECIMALS = 0 THEN
CONVERT(Numeric(38,0), ABS(round(TS.TRADECCY1AMOUNT, 0)))
WHEN CCY.NUMBEROFDECIMALS = 2 THEN
CONVERT(Numeric(38,2), ABS(round(TS.TRADECCY1AMOUNT, 2)))
WHEN CCY.NUMBEROFDECIMALS = 3 THEN
CONVERT(Numeric(38,3), ABS(round(TS.TRADECCY1AMOUNT, 3)))
END as 'Transaction Amount',


FROM
blah blah blah

それでも、私の結果セットは常に次のとおりです。

ここに画像の説明を入力

10 進数の 0 を削除すると、正しい結果が得られます。このケースステートメントが常に 0 ケースを評価する理由について、誰か考えがありますか?

ありがとう!

4

1 に答える 1

0

elseステートメントが欠落していて、データ型が異なると、すべてが混乱すると思います。これがあなたが学ぶべき良いデバッグテクニックです。完全に基本的なところまでコードを単純化します。次に、ロジックの追加を開始します。間違いを犯している場所をすぐに見つけることができます。あなたの場合、これから始めてください:

SELECT CASE 
    WHEN t.a = 0 THEN 1
    WHEN t.a = 2 THEN 2
    WHEN t.a = 3 THEN 3
END as c
FROM (  select 1 as a
        union
        select 2 as a
        union
        select 3 as a
     ) t

THEN句を1つずつ変更します。明らかにCASEステートメントは機能するので、それはあなたがしていることでなければなりません。

于 2012-07-20T20:19:00.803 に答える