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