Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何返回给定两条sql记录的相交年数和月数_Sql_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

如何返回给定两条sql记录的相交年数和月数

如何返回给定两条sql记录的相交年数和月数,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我有一个名为Employee的表。其中有三列名为开始日期、结束日期和员工姓名 我正在编写一个存储过程,它接受两个EmployeesEmployeeName的开始日期和结束日期,如果他们一起工作,则返回true,还返回他们一起工作的年数和月数 所以我希望查询返回john和kashif一起工作的年数,如果他们一起工作,bool值为true或false 我该怎么做 求求你,外面的任何人都可以帮助我,所以,请帮我 谢谢检查此查询: DECLARE @Start_Date DATE ='2012/08/0

我有一个名为Employee的表。其中有三列名为开始日期、结束日期和员工姓名

我正在编写一个存储过程,它接受两个EmployeesEmployeeName的开始日期和结束日期,如果他们一起工作,则返回true,还返回他们一起工作的年数和月数

所以我希望查询返回john和kashif一起工作的年数,如果他们一起工作,bool值为true或false

我该怎么做

求求你,外面的任何人都可以帮助我,所以,请帮我

谢谢

检查此查询:

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
存储过程
员工在该表上可以有多行,即多个开始日期和结束日期,还是始终只有一个日期范围?在给定情况下,Brian Demilia员工只能有一行
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