1

こんにちは、結合テーブルクエリを使用してデータを取得しています..

USE [AccountingSystem_TEST]
GO
/****** Object:  StoredProcedure [dbo].[spHRLeaveEntitlementBuildTemp]    Script Date: 03/14/2013 09:18:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER Procedure [dbo].[spHRLeaveEntitlementBuildTemp]
    (   
     @CreatedUserID as nvarchar(9)
    ,@EmployeeID nvarchar(9) 
    ,@EmpName nvarchar(150)
    )
AS
BEGIN

    Select A.CodeHRLeaveType,
        COALESCE(B.LeaveBalance) LeaveBalance           
    From HRLeaveType A
        LEFT JOIN HRLeaveMaster B 
        On A.CodeHRLeaveType = B.CodeHRLeaveType
    Where   B.EmployeeID = @EmployeeID

    Delete dbo.HrLeaveMasterTemp
    Where UserID = @CreatedUserID 

    INSERT INTO [dbo].[HrLeaveMasterTemp]
       ( [UserID]
        ,[EmployeeID] 
        ,[EmpName]
        ,[CodeHRLeaveType]
        ,[LeaveBalance]
        ,[Status] 
        )
    Select 
         @CreatedUserID             
        ,[EmployeeID]
        ,@EmpName
        ,[CodeHRLeaveType]
        ,[LeaveBalance]
        ,[Status]           
    From dbo.[HRLeaveMaster]
    Where EmployeeID =@EmployeeID
END
--Select * From HRLeaveMasterTemp

leavebalance が null の場合、テーブルに 0 を表示する必要があります。しかし、ステートメントにエラーが表示されます。助けてください。

4

2 に答える 2

1

Oracleでは、null関数の置換はNVL関数で使用されます。MySqlでは、null関数の置換はIFNULL関数で使用されます。

http://www.w3schools.com/sql/sql_isnull.aspをご覧ください。それはあなたを助けるかもしれません。

ステートメントは-

Select A.CodeHRLeaveType,
    IFNULL(B.LeaveBalance,0) LeaveBalance           
From HRLeaveType A
    LEFT JOIN HRLeaveMaster B 
    On A.CodeHRLeaveType = B.CodeHRLeaveType
Where   B.EmployeeID = @EmployeeID
于 2013-03-14T03:32:40.763 に答える
1

使用するCOALESCE

Select  A.CodeHRLeaveType,
        COALESCE(B.LeaveBalance) LeaveBalance           
From    HRLeaveType A
        LEFT JOIN HRLeaveMaster B 
            On A.CodeHRLeaveType = B.CodeHRLeaveType
Where   B.EmployeeID = @EmployeeID
于 2013-03-14T03:14:18.723 に答える