Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在子查询中使用函数_Sql_Stored Procedures - Fatal编程技术网

Sql 如何在子查询中使用函数

Sql 如何在子查询中使用函数,sql,stored-procedures,Sql,Stored Procedures,我有一个名为MemberCheck的表,其中的字段是: MemberName, Amount 我想在将整数和小数分开后,用数字和文字显示名称和各自的金额。所以我的问题是: SELECT MemName, Amount, (SELECT (Amount)%1*100 AS lefAmn, dbo.fnNumberToWords(lefAmn)+ 'Hundred ', (Amount) - (Amount)%1 AS righAmnt, dbo.fnNumberToWords (

我有一个名为MemberCheck的表,其中的字段是:

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

但我的存储过程只能将整数值转换为单词。所以,我将金额分为十进制前后两部分,但当我尝试运行此查询时,它会给我一个错误,即lefAmn和righAmnt未被识别。因为我试图从同一个查询发送参数。

如果无法更改函数,请将左/右值转换为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))

第一个问题是,您有一个子查询返回多个值,而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

你们说,但我的存储过程只能将整数值转换成单词,但你们是指你们的函数吗?你的函数是什么样的?金额的数据类型是什么?如果不是整数,则只需更新函数以接受适当的数据类型;否则,只需将值转换为整数。而且,说这件事真的很紧急,只会让人恼火。谢谢你的建议。实际上,金额是一种货币类型,因为金额可以是234.20。因此,我的函数可以获取参数中的整数,然后返回单词amount。这就是为什么我要更改小数点前和小数点后的数量。您使用的是什么数据库引擎?MySQL,Postgres,MS SQL Server,Oracle。。。存储过程和/或函数的行为和能力在不同平台之间差异很大。谢谢回复。我正在使用SQL Server。谢谢。是的,我可以强制转换,但是如何从同一查询发送lefAmn或righAmnt in参数?因为我需要将此查询与数据集绑定并显示到crystal报表中。这就是为什么我希望从一个查询中得到这个输出。你能告诉我怎么做吗?一开始就误读了这个问题。你不能传递你刚才在同一条语句中创建的别名,请参阅更新的答案。非常感谢兄弟…你真的让我开心了…非常感谢..它起作用了:非常感谢兄弟…这个查询也很有魅力..你们刚刚救了我的命..干杯: