我有一个名为Employee的表。并且有三列名为start_date和end_date以及employee_name。
我正在编写存储过程,它接受两个员工(员工姓名)的start_date,end_date,如果他们一起工作,则返回true,并返回他们一起工作的年数和月数。
所以我想查询返回john和kashif一起工作的年数,如果他们一起工作,bool值为true或false。
我该怎么做?
请那里的任何人都可以帮助我,所以请做。
由于
答案 0 :(得分:1)
DECLARE @emp1 VARCHAR(10) = 'John'
DECLARE @emp2 VARCHAR(10) = 'Kashif'
SELECT CASE WHEN EXISTS (SELECT 1 FROM Emp
WHERE empID = @emp2
AND StartDate >= t.StartDate
AND EndDate <= t.EndDate)
THEN 1 ELSE 0 END [Has Worked together]
,CASE WHEN EXISTS (SELECT 1 FROM Emp
WHERE empID = @emp2
AND StartDate >= t.StartDate
AND EndDate <= t.EndDate)
THEN DATEDIFF(DAY, CASE WHEN StartDate <= t.StartDate THEN StartDate ELSE t.StartDate END
, CASE WHEN EndDate >= t.EndDate THEN EndDate ELSE t.EndDate END)
ELSE 0 END [Days worked together]
FROM Emp t
WHERE empID = @emp1
Has Worked together Days worked together
1 30
CREATE PROCEDURE dbo.myProc
@Employee1 VARCHAR(20),
@Employee2 VARCHAR(20),
@Worked_Together BIT OUTPUT,
@Days_Worked INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @Worked_Together
= CASE WHEN EXISTS (SELECT 1 FROM Emp
WHERE empID = @Employee2
AND StartDate >= t.StartDate
AND EndDate <= t.EndDate)
THEN 1 ELSE 0 END
,@Days_Worked
= CASE WHEN EXISTS (SELECT 1 FROM Emp
WHERE empID = @Employee2
AND StartDate >= t.StartDate
AND EndDate <= t.EndDate)
THEN DATEDIFF(DAY, CASE WHEN StartDate <= t.StartDate THEN StartDate ELSE t.StartDate END
, CASE WHEN EndDate >= t.EndDate THEN EndDate ELSE t.EndDate END)
ELSE 0 END
FROM Emp t
WHERE empID = @Employee1
END
答案 1 :(得分:0)
检查此查询:
DECLARE @Start_Date DATE ='2012/08/01'
DECLARE @End_Date DATE ='2014/08/01'
SELECT T1.ProfileName,
T1.ProfileName,
DATEDIFF(YEAR,CASE WHEN T1.START_DATE > T2.START_DATE THEN T1.START_DATE ELSE T2.START_DATE End,CASE WHEN T1.End_DATE > T2.End_DATE THEN T2.End_DATE ELSE T1.End_DATE End ) Years
FROM Tbl T1,Tbl T2
WHERE T1.Start_Date >= @Start_Date
AND T2.Start_Date >= @Start_Date
AND T1.End_Date <= @End_Date
AND T2.End_Date <= @End_Date