我有一个名为'Table1'的表,我需要根据一个条件检索'Amount'。如果'Currency'是'Dollar',我希望金额以小数点后1位显示。如果货币不是'美元',金额应该是2位小数。我已经使用了case-else条件。但是它没有检查条件,只显示更大的小数位。我的查询如下。
Select InvNo,
Case Currency when 'Dollar' then
Convert(decimal(18,1),Amount)
Else
Convert(decimal(18,2),Amount)
End
'Amount'
From Table1 where ID=1
我的输出如下:
InvNo Amount
236 5200.26
如果我扭转了条件,我得到相同的输出。
Select InvNo,
Case Currency when 'Dollar' then
Convert(decimal(18,2),Amount)
Else
Convert(decimal(18,1),Amount)
End
'Amount'
From Table1 where ID=1
我的输出如下:
InvNo Amount
236 5200.26
也就是说,它没有检查条件。但它只考虑最小的小数位。请帮忙。
答案 0 :(得分:2)
尝试使用ROUND代替
DECLARE @Table1 TABLE(
ID INT,
Currency VARCHAR(10),
Amount FLOAT
)
INSERT INTO @Table1 SELECT 1, 'Dollar', 5200.26
INSERT INTO @Table1 SELECT 1, 'Pound', 5200.26
Select
Case Currency when 'Dollar' then
CAST(Amount AS decimal(18,1))
Else
CAST(Amount AS decimal(18,2))
End 'Amount',
Case Currency when 'Dollar' then
ROUND(Amount,1)
Else
ROUND(Amount,2)
End 'Amount'
From @Table1
where ID=1
输出
Amount Amount
--------------------------------------- ----------------------
5200.30 5200.3
5200.26 5200.26