我有一个表将员工信息存储在多行中,它具有通用名称以及用户登录时间和网站注销时间,并希望获得结果,它可能包含多个名称,例如(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
任何人都可以帮助我实现这一目标
答案 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
上测试