0

ストアド プロシージャを変更して 2 つの SQL ステートメントを実行するにはどうすればよいですか

CREATE procedure [dbo].[hms_GetEmployeeSalaryRecordsByContractId]
(
@Id int
)
as
SELECT c.*
FROM  contract c
where c.emp_no =  @Id AND c.leave_date='1900-01-01 00:00:00.000' and c.main_contract=1

select * from salary s where s.contract_id = firstquery.contract_id

上記は、1 つの契約に基づいて 2 つの給与レコードを見つけることができます

sum(s.salary)複数の給与が見つかった場合は、ストアド プロシージャでそれを 10 進数値として返す必要があります。

今までここまでやってきた

 USE [pamsv83x]
GO
/****** Object:  StoredProcedure [dbo].[hms_GetEmployeeSalaryRecordsByContractId]    Script Date: 08/29/2013 10:45:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

Create procedure [dbo].[hms_GetEmployeeSalaryRecordsByContractEmpNo]
(
@Id int,
@sallaryresult decimal(8,2) OUTPUT
)
as
DECLARE @contract_id int
DECLARE @totalsallary decimal(8,2)
set @contract_id=(SELECT c.contract_id
FROM  contract c
where c.emp_no =  @Id AND c.leave_date='1900-01-01 00:00:00.000' and c.main_contract=1)


SELECT *,SUM(salary)
from salary s 
where s.emp_no=@contract_id
return 

修正 2 ----- 彼らは複数の契約を持つことができますが、複数の給与を持つことができます

 Create procedure [dbo].[hms_GetEmployeeSalaryRecordsByContractEmpNo]
 (
@Id int,
@sallaryresult decimal(8,2) OUTPUT
)
as
DECLARE @contract_id int
DECLARE @totalsallary decimal(8,2)
set @contract_id=(SELECT c.contract_id
FROM  contract c
where c.emp_no =  @Id AND c.leave_date='1900-01-01 00:00:00.000')


SELECT *,SUM(salary + old_salary)
from salary s 
where s.contract_id=@contract_id
return 
4

1 に答える 1

0

これを行うには、給与を連絡先に結合するのがより良い方法です。何かのようなもの:

CREATE procedure [dbo].[hms_GetEmployeeSalaryRecordsByContractId]
(
@Id int
)
as
SELECT 
     c.contract_id
    ,SUM(s.salary + s.old_salary)       
FROM  
    contract c
INNER JOIN
    salary s
    ON c.contract_id = s.contract_id    
WHERE
        c.emp_no = @Id 
    AND c.leave_date = '1900-01-01 00:00:00.000' 
    AND c.main_contract = 1

GROUP BY
    c.contract_id 

上記は従業員 ID を受け入れ、contact_id ごとに集計された給与値を返します。

于 2013-08-29T18:35:03.867 に答える