SQL 将两条记录连接成一行多列

标签 sql join multiple-columns

我想将两条记录(来自同一个表)连接到具有多列的一行中。

工作历史结构如下:

StaffID     StartDate       EndDate         DeptID
==================================================
1           2010-10-01      2011-01-19      1
1           2011-01-20      2012-12-31      2
1           2013-01-01      2013-05-29      4

如果相同的 StaffID 并且第二条记录的开始日期是第一条记录的结束日期后 1 天(连续雇用),我如何将两行合并为一行

输出应该是这样的

StaffID     EffectiveDate   New_DeptID      Prev_DeptID     
==================================================
1           2011-01-20      2               1
1           2013-01-01      4               2

以下是我的sql语句,但它不起作用

  select distinct
    ca1.StaffID,
    ca1.ProjectDepartment as Prev_DeptID, ca1.StartDate, ca1.EndDate, 
    ca2.ProjectDepartment as New_DeptID, ca2.StartDate, ca2.EndDate
from 
emp_hist as ca1,
emp_hist as ca2
where 
    (ca1.StaffID = ca2.StaffID) 
    and ca1.StartDate<>ca2.StartDate
    and ca1.EndDate <>ca2.EndDate
    and  ca2.startdate= DATEADD(day, 1, ca1.enddate)

例如, 表中两条记录(真实数据):

StaffID     StartDate                   EndDate                     DeptID
===========================================================================
1           2010-04-12 12:00:00.000     2013-02-28 00:00:00.000     1
1           2013-03-01 12:00:00.000     2013-08-29 11:02:59.877     2

我无法使用我的sql语句检索该记录

最佳答案

您的问题是日期有时间部分。您似乎正在使用 SQL Server。您可以通过执行以下操作来修复您的查询:

select ca1.StaffID,
       ca1.ProjectDepartment as Prev_DeptID, ca1.StartDate, ca1.EndDate, 
       ca2.ProjectDepartment as New_DeptID, ca2.StartDate, ca2.EndDate
from emp_hist as ca1 join
     emp_hist as ca2
     on ca1.StaffID = ca2.StaffID and
        cast(ca1.StartDate as date) <> cast(ca2.StartDate as date) and
        cast(ca1.EndDate as date) <> cast(ca2.EndDate as date) and
        cast(ca2.startdate as date) = DATEADD(day, 1, cast(ca1.enddate as date));

我还用改进的连接语法替换了隐式连接。

关于SQL 将两条记录连接成一行多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18501518/

相关文章:

php - 如何获取MySQL数据库表的最后一个id,并将其存储在变量中

Mysql,Doctrine 1.2 一个复杂的 Join 查询

SQL Server 2008R2 完全外连接不工作

linux - 从 linux 中的多列创建表,但将字段 2、3(也可能是 4)视为一列

css - 如何根据屏幕大小设置列数?

c# - 在 ASP.Net MVC 中使用硬编码形式将数据插入对象中

sql - sys.objects View 中缺少 Sys.Indexes 项 SQL Server 2014

mysql - SQL 用户定义函数的参数数量不定?

sql - 编写自联接查询?

Bash 将单个逗号分隔的列转换为多行字符串