sql - 如何在同一行中返回每周轮班开始和结束预定时间?
问题描述
一名员工每天早上 9 点到下午 5 点工作,连续工作 7 天。有时轮班会发生变化。所以我想在 1 行中返回整周的预定时间,如下所示:
我想要以下内容:
Sat In Sat Out Sun In Sun Out
---------------- ---------------- ---------------- ----------------
09:00:00.0000000 17:00:00.0000000 09:00:00.0000000 17:00:00.0000000
但相反,我得到:
Sat In Sat Out Sun In Sun Out
---------------- ---------------- ---------------- ----------------
NULL NULL NULL NULL
NULL NULL 09:00:00.0000000 17:00:00.0000000
09:00:00.0000000 10:30:00.0000000 NULL NULL
10:30:00.0000000 17:00:00.0000000 NULL NULL
我的部分代码:
Select DISTINCT
case DATENAME(dw, Date) when 'Monday' then CAST(Start AS TIME) end as [Mon In]
,case DATENAME(dw, Date) when 'Monday' then CAST(End AS TIME) end as [Mon Out]
,case DATENAME(dw, Date) when 'Tuesday' then CAST(Start AS TIME) end as [Tue In]
,case DATENAME(dw, Date) when 'Tuesday' then CAST(End AS TIME) end as [Tue Out]
,case DATENAME(dw, Date) when 'Wednesday' then CAST(Start AS TIME) end as [Wed In]
,case DATENAME(dw, Date) when 'Wednesday' then CAST(End AS TIME) end as [Wed Out]
from Table1 t
inner join Table2 s on s.ID = t.ID
where Date between '2020-03-01' AND '2020-03-07'
解决方案
您可以将查询包装在子查询中,然后汇总如下:
SELECT min([Mon In]), max([Mon Out]), min([Tue In])....
FROM (
Select DISTINCT
case DATENAME(dw, Date) when 'Monday' then CAST(Start AS TIME) end as [Mon In]
,case DATENAME(dw, Date) when 'Monday' then CAST(End AS TIME) end as [Mon Out]
,case DATENAME(dw, Date) when 'Tuesday' then CAST(Start AS TIME) end as [Tue In]
,case DATENAME(dw, Date) when 'Tuesday' then CAST(End AS TIME) end as [Tue Out]
,case DATENAME(dw, Date) when 'Wednesday' then CAST(Start AS TIME) end as [Wed In]
,case DATENAME(dw, Date) when 'Wednesday' then CAST(End AS TIME) end as [Wed Out]
from Table1 t
inner join Table2 s on s.ID = t.ID
where Date between '2020-03-01' AND '2020-03-07'
) subquery
话虽如此,如果我们有样本数据(来自您的Table1
and Table2
),我们可能能够帮助使用交叉表或数据透视表(取决于这是 Access 还是 Sql Server)获得更高性能的查询
推荐阅读
- javascript - 设备方向传感器到 CSS 转换
- powershell - 用于从一个 OU 检索 PC 成员资格的 Powershell 脚本
- node.js - 重新安装后,“node”命令在错误的目录中查找
- android - 无法对具有不同高度和宽度的位图进行样式化
- docker - 容器扫描功能不适用于多个图像
- php - 类仅在将值定义为构造函数中的参数时才有效
- java - 如何修复 Spring Boot 中发生的“HttpMessageNotReadableException”和“SocketTimeOutException”
- angular7 - 根据请求,braintree-web API 中位置 1 处 JSON 中的意外令牌 o
- ruby-on-rails - 如何在 Ruby 中删除 \r\n?
- r - 使用动画包将pdf转换为png