我有一个名为MemberCheque的表,其中的字段是:
MemberName, Amount
我希望在将整数金额与小数分开后,以数字和单词显示名称和相应的金额。所以我的查询就像:
SELECT MemName, Amount, (SELECT (Amount)%1*100 AS lefAmn, dbo.fnNumberToWords(lefAmn)+
'Hundred ', (Amount) - (Amount)%1 AS righAmnt, dbo.fnNumberToWords (righAmnt)+' Cents'
from MemberCheque) AS AmountInWords FROM MemberCheque
但是我的商店程序只能将整数值改为单词。所以,我正在将Amount分成前后两部分,但是当我试图运行这个查询时,它给出了lefAmn和righAmnt无法识别的错误。因为我试图从同一个查询中发送参数。
答案 0 :(得分:2)
第一个问题是你有一个子查询返回多个值,select
子句中的子查询不允许这样做。
您对特定问题的回答是使用cast()
(或convert()
)来使数字整数:
select leftAmt, rightAmt,
(dbo.fnNumberToWords(cast(leftAmt as int))+'Hundred ' +
dbo.fnNumberToWords(cast(rightAmt as int))+' Cents'
) as AmountInWords
from (SELECT (Amount%1)*100 AS leftAmt,
(Amount) - (Amount)%1 AS rightAmt
from MemberCheque
) mc
答案 1 :(得分:1)
如果无法改变功能,则将左/右值CAST为INT:
CAST((Amount)%1*100 AS INT) AS lefAmn
CAST((Amount) - (Amount)%1 AS INT) AS righAmnt
您无法传递在与函数参数相同的语句中创建的别名,您需要:
dbo.fnNumberToWords (CAST((Amount)%1*100 AS INT))
dbo.fnNumberToWords (CAST((Amount) - (Amount)%1 AS INT))