2017-01-19 8 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 

エラーメッセージ:MIN関数は、1つの引数(複数可)が必要です

メッセージ174、レベル15、状態1、プロシージャFN_TempCalcTransportExemp、ライン 。

+0

エラーが話しているASあなたのコードのこの行を 'set @ TarnsportExemption = MIN(@ MinConveyance、@ MinTransport)'と呼びます。 'MIN'関数には1つ必要です。あなたは2つを渡しました。 –

+1

この 'Select @ TarnsportExemption = @MinConveyance <@MinTransportの場合のケース @MinConveyance Else @MinTransport End ' – crowchirp

答えて

4

set @TarnsportExemption = MIN(@MinConveyance,@MinTransport) - MINの機能はあなたの考えではありません。

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

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

そして、もう一つのオプションは、値の句を使用することです:

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

別のオプションはこれです:

あなたは、おそらくこのような何かをしたいです次のようなmin文を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

から選択分(給与)、あなたのケースでは、あなたのように二つの変数から最小値を取得するときにまたは組合のすべてのケースを使用することができ、次のいずれか -

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

OR

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

UNION AS SELECT @MinConveyance VALUE AS ALL

SELECT @MinTransport)FROM TEMPS

+0

答えは私のものではありませんでしたか? –

関連する問題