SQL查询:1个员工职位/职位作为2个结果

SQL查询:1个员工职位/职位作为2个结果,sql,sql-server,Sql,Sql Server,我有一份当前职位/职位的员工名单,以及他们在该职位的开始日期和雇佣开始日期 我需要一个查询来生成当前职位作为一个结果,如果职位的开始日期与雇佣的开始日期不匹配,则显示一个历史职位作为第二个结果 资料 输出 [Employee Number] Position [Start Date] [End Date] ----------------------------------------------------------- 12345 Admin

我有一份当前职位/职位的员工名单,以及他们在该职位的开始日期和雇佣开始日期

我需要一个查询来生成当前职位作为一个结果,如果职位的开始日期与雇佣的开始日期不匹配,则显示一个历史职位作为第二个结果

资料

输出

[Employee Number]   Position    [Start Date]    [End Date]
-----------------------------------------------------------
12345               Admin       01/01/2017      NULL
12345               Historic    01/01/2016      31/12/2017
您可以使用union all:


从方括号中,我猜是SQL Server。感谢您的回复。我已经得到了上面的数据,以及结束日期,然而,我的问题是通过两行输出数据,当前帖子和历史帖子。抱歉,如果第一篇文章的描述不清楚。。。
[Employee Number]   Position    [Start Date]    [End Date]
-----------------------------------------------------------
12345               Admin       01/01/2017      NULL
12345               Historic    01/01/2016      31/12/2017
select employee_number, position, start_date, cast(null as date) end_date
from data
union all
select employee_number, position, employment_start_date, dateadd(day, -1, start_date)
from data
where employment_start_date < start_date;
SELECT 
       [Employee Number],
       [Position],
       [Start Date],
       NULL AS [End Date]
FROM 
      TABLE_NAME

UNION ALL

SELECT 
       [Employee Number],
       'Historic' AS [Position],
       [Employment Start Date] AS [Start Date],
       DATEADD( DAY,-1,[Start Date] ) AS [End Date]
FROM 
      TABLE_NAME
WHERE 
      [Start Date] <> [Employment Start Date]
            WITH table1 AS (
                SELECT * FROM (
                    VALUES
                        ('12345', 'Admin','2017-01-01','2016-01-01')

                    ) AS a (EmployeeNumber, position,StartDate,EmploymentStartDate)
            )

            select EmployeeNumber, position,StartDate, CASE WHEN StartDate!=EmploymentStartDate THEN NULL ELSE EmploymentStartDate END AS EndDate  from table1
            union
            Select EmployeeNumber,'Historic',EmploymentStartDate as StartDate,DATEADD(dd,-1,DATEADD(yy,1,StartDate)) AS EndDate
            From table1 where StartDate!=EmploymentStartDate