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

然而我的结果集总是:

在此处输入图像描述

当我删除小数位数 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 子句。显然 CASE 语句有效,所以它一定是你正在做的事情。

于 2012-07-20T20:19:00.803 回答