如何使用SQL Server在本查询中按日分组结果?
发布时间:2021-03-30 13:14:33 所属栏目:MsSql 来源:互联网
导读:sql fiddle demo here 我有这个表结构的日记表: CREATE TABLE Diary( [IdDiary] bigint, [UserId] int, [IdDay] numeric(18,0), [IsAnExtraHour] bit);INSERT INTO Diary ([IdDiary], [UserId], [Id
sql fiddle demo here 我有这个表结构的日记表: CREATE TABLE Diary ( [IdDiary] bigint,[UserId] int,[IdDay] numeric(18,0),[IsAnExtraHour] bit ); INSERT INTO Diary ([IdDiary],[UserId],[IdDay],[IsAnExtraHour]) values (51,1409,1,(52,1),(53,3,(54,5,(55,(56,1408,2,0); 而这种结构为DiaryTimetable表: CREATE TABLE DiaryTimetable ( [IdDiary] bigint,[Hour] varchar(50) ); INSERT INTO DiaryTimetable ([IdDiary],[Hour]) VALUES (51,'09:00'),(51,'09:30'),'10:00'),'10:30'),'11:00'),'15:00'),'15:30'),'16:00'),'16:30'),'17:00'),'11:30'),'12:00'),'12:30'),'13:00'),'17:30'),'18:00'),'17:00'); 我使用这个查询来获取用户标识1409的最大时间和最小时间,以获得每天输入的时间和离开工作的时间. idday与一周中的星期数相对应.例如1星期一,2是星期二等… SELECT d.IdDiary,d.IdDay,MIN(Hour) as 'Start Time',MAX(Hour) as 'End Time',IsAnExtraHour FROM Diary AS d LEFT JOIN DiaryTimetable AS dt ON d.IdDiary = dt.IdDiary where userid = 1409 GROUP BY d.IdDiary,IsAnExtraHour 这个查询给出了这个结果: 我想得到这个结果: Day Start Time End Time Start Extra Time End Extra Time ----- ---------- -------- --------------- --------------- Monday 09:00 11:00 15:00 17:00 Wednessday 11:00 13:00 Friday 10:00 12:00 16:00 18:00 我有一列(IsAnExtraHour)这一列表示这一行是否在一天中有额外的时间,例如在09:00至11:00在星期一开始工作,然后在下午15:00至17点再次工作: 00,所以我想知道我该怎么把这个小时在同一行,我希望能够表达清楚,我接受建议谢谢. 解决方法SELECT d.IdDay,MIN(CASE WHEN isAnExtraHour = 0 THEN hour END) as 'Start Time',MAX(CASE WHEN isAnExtraHour = 0 THEN hour END) as 'End Time',MIN(CASE WHEN isAnExtraHour = 1 THEN hour END) as 'Start Extra Time',MAX(CASE WHEN isAnExtraHour = 1 THEN hour END) as 'End Extra Time' FROM Diary AS d LEFT JOIN DiaryTimetable AS dt ON dt.IdDiary = d.IdDiary WHERE userid = 1409 GROUP BY d.IdDay (编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQLServer Job运行成功或失败时发送电子邮件通知的图文教程
- tsql – SQL将行转换为列
- 用SQL Server2005同义词链接Oracle的完整过程
- sql-server – 如何更改SQL Server中列的数据类型?
- Sql Server里删除数据表中重复记录的例子
- sql2005 附加数据库出错(错误号:5123)解决方法
- sql-server – 无法在SQL Server 2012上运行的T-SQL CTE实现
- sql-server – 在SQL Server数据库中存储时间间隔的最佳方法
- 一段脚本实现自动备份并保存最近几天的SQL数据库
- sql语句中单引号嵌套问题(一定要避免直接嵌套)