查找sql​​中两行之间的差异

时间:2021-05-24 08:11:51

标签: sql sql-server

我有一个表将员工信息存储在多行中,它具有通用名称以及用户登录时间和网站注销时间,并希望获得结果,它可能包含多个名称,例如(N1,N2,N3..等)

Name,Key,Time,
N1,TotalExp,No
N1,TotalYears,5
N1,LoggedIn,10:00:00
N1,LoggedOut,20:00:00

预期输出如下,

N1,TotalExp,TotalYrs,LoggedDifference
N1,No,5,10

任何人都可以帮助我实现这一目标

1 个答案:

答案 0 :(得分:3)

即使你的数据库设计看起来不太好,你也可以这样查询你的数据:

with your_data as (
  select 'N1' as Name,'TotalExp' as [Key],'No' as Time union all
  select 'N1','TotalYears','5' union all
  select 'N1','LoggedIn','10:00:00' union all
  select 'N1','LoggedOut','20:00:00'
)
select
  Name,
  max(case when [Key] = 'TotalExp' then Time else null end) as TotalExp,
  max(case when [Key] = 'TotalYears' then Time else null end) as TotalYrs,
  datediff(
    hour,
    max(case when [Key] = 'LoggedIn' then convert(time, Time) else null end),
    max(case when [Key] = 'LoggedOut' then convert(time, Time) else null end)
  ) as LoggedDifference
from your_data 
group by Name

您可以在 here

上测试
相关问题