2017-01-19 109 views
-2

下面是MIN函数使用的代码片段。当执行下面的代码时,它提供了一个错误。MIN函数需要1个参数

CREATE FUNCTION [dbo].[FN_TempCalcTransportExemp] 
(
    @EmployeeID varchar(20), 
    @PayElement varchar(20), 
    @Month varchar(10), 
    @FinYear varchar(10) 
) 
RETURNS decimal 
AS 
BEGIN 
    DECLARE @TarnsportExemption decimal(18,2) = 0 
    DECLARE @TDSIsFullExemption bit 
    DECLARE @PermanentPhysicalDisability decimal(18,2) = 0 
    DECLARE @UsingComapnyCar bit 
    DECLARE @Conveyance decimal(18,2) = 0 
    DECLARE @TransYes decimal(18,2) = 0 
    DECLARE @TransNo decimal(18,2) = 0 

    DECLARE @MinConveyance decimal(18,2) = 0 
    DECLARE @MinTransport decimal(18,2) = 0 

    SELECT 
     @TDSIsFullExemption = TDSDetailsFullExemption, 
     @TransYes = TDSDetailsYes, 
     @TransNo = TDSDetailsNo 
    FROM 
     tbl_TDSSettingDetails 
    WHERE 
     TDSSettingsDetailID = 2 

    SELECT 
     @Conveyance = @Month 
    FROM 
     tbl_Income 
    WHERE 
     EmployeeID = @EmployeeID 
     AND Element = @PayElement 
     AND FinancialYear = @FinYear 

    SELECT 
     @UsingComapnyCar = UsingCompanyCar, 
     @PermanentPhysicalDisability = PermanentPhysicalDisability 
    FROM 
     tbl_Employee_TDS 
    WHERE 
     EmployeeID = @EmployeeID 
     AND TDSFinancialYear = @FinYear 

    IF (@TDSIsFullExemption = 1) 
    BEGIN 
     SET @TarnsportExemption = @Conveyance 
    END 
    ELSE 
    BEGIN 
     IF (@UsingComapnyCar = 1) 
     BEGIN 
      IF (@Conveyance = 0) 
      BEGIN 
       SET @MinConveyance = 0 
      END 
      ELSE 
      BEGIN 
       SET @MinConveyance = @Conveyance 
      END 

      IF (@PermanentPhysicalDisability = 1) 
      BEGIN 
       SET @MinTransport = @TransYes 
      END 
      ELSE 
      BEGIN 
       SET @MinTransport = @TransNo 
      END 

      SET @TarnsportExemption = MIN(@MinConveyance, @MinTransport) 
     END 
     ELSE 
     BEGIN 
      SET @TarnsportExemption = 0 
     END 
    END 

    RETURN @TarnsportExemption 
END 

错误消息:

消息174,级别15,状态1,过程FN_TempCalcTransportExemp, 线66
MIN函数要求1点的参数(一个或多个)。

+0

错误正在讲话清晰,handel代码的这一行'set @TarnsportExemption = MIN(@ MinConveyance,@ MinTransport)','MIN'函数需要一个。论点,你通过了两个。 –

+1

你可以使用这个'选择@TarnsportExemption =案例当@MinConveyance <@MinTransport 然后@MinConveyance Else @MinTransport结束' – crowchirp

回答

4

set @TarnsportExemption = MIN(@MinConveyance,@MinTransport) - MIN函数不是你认为的那样。

你可能想要做这样的事情:

set @TarnsportExemption = CASE WHEN @MinConveyance < @MinTransport THEN 
           @MinConveyance 
          ELSE 
           @MinTransport 
          END 

另一种选择是这样的:

SELECT @TarnsportExemption = MIN(val) 
FROM 
(
    SELECT @MinConveyance as val 
    UNION ALL 
    SELECT @MinTransport as val 
) 

而且多一个选择是使用值子句:

SELECT @TarnsportExemption = MIN(val) 
FROM (VALUES (@MinConveyance), (@MinTransport)) AS value(val) 
0

改变你的最低陈述如下MIN。请参阅MIN (Transact-SQL)

--fROM 
set @TarnsportExemption = MIN(@MinConveyance,@MinTransport) 

--To 
SELECT @TarnsportExemption = MIN(A) FROM (
SELECT @MinConveyance A 
UNION ALL 
SELECT @MinTransport 
)AS AA 
0

在SQL中,MIN函数将返回您从选定列表中列的最小值;所以你只能在内联查询中使用MIN。

例如从Tbl_Employee选择分钟(工资)

所以,在你的情况下,或者您可以使用情况,那么当或UNION ALL从两个变量得到最小值: -

SET @TarnsportExemption = CASE WHEN @MinConveyance < @MinTransport THEN @MinConveyance ELSE @MinTransport END

OR

SELECT @TarnsportExemption = MIN(TEMPS。[VALUE]) FROM(SELECT AS @MinConveyance VALUE

UNION ALL

SELECT @MinTransport AS VALUE )AS滕普斯

+0

你的答案提供什么信息,我的没有? –

相关问题