如何修改存储过程以运行两个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
以上可以根据一份合同找到两份工资记录
如果找到多个工资,那么我需要做一个sum(s.salary)
然后将其作为存储过程中的十进制值返回。
我到目前为止已经这样做了
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
答案 0 :(得分: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返回汇总的工资值。