加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 数据库 > MsSql > 正文

如何使用SQL Server在本查询中按日分组结果?

发布时间:2021-03-30 18:49:13 所属栏目: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

(编辑:商洛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读