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

Esraa_92

sql小提琴演示在这里

我的日记表具有以下表结构:

 CREATE TABLE Diary
(
     [IdDiary] bigint, 
     [UserId] int,
     [IdDay] numeric(18,0),
     [IsAnExtraHour] bit
);

INSERT INTO Diary ([IdDiary],  [UserId],  [IdDay], [IsAnExtraHour])
values 
(51, 1409, 1, 0),
(52, 1409, 1, 1),
(53, 1409, 3, 0),
(54, 1409, 5, 0),
(55, 1409, 5, 1),
(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'),
    (51, '10:00'),
    (51, '10:30'),
    (51, '11:00'),
    (52, '15:00'),
    (52, '15:30'),
    (52, '16:00'),
    (52, '16:30'),
    (52, '17:00'),
    (53, '11:00'),
    (53, '11:30'),
    (53, '12:00'),
    (53, '12:30'),
    (53, '13:00'),
    (54, '10:00'),
    (54, '10:30'),
    (54, '11:00'),
    (54, '11:30'),
    (54, '12:00'),
    (55, '16:00'),
    (55, '16:30'),
    (55, '17:00'),
    (55, '17:30'),
    (55, '18:00'),
    (56, '15:00'),
    (56, '15:30'),
    (56, '16:00'),
    (56, '16:30'),
    (56, '17:00');

我使用此查询来获取用户ID 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, d.IdDay, 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在SQL Server中按子查询分组

来自分类Dev

在SQL Server中按子查询分组

来自分类Dev

在SQL Server中按查询分组返回重复项

来自分类Dev

在SQL查询中按分组

来自分类Dev

如何使SQL查询按日期分组和求和结果?

来自分类Dev

在SQL Server 2012中按7天窗口对班次数据进行分组

来自分类Dev

对所有结果按SQL Server分组

来自分类Dev

如何使用PHP将SQL查询结果存储在变量中?

来自分类Dev

使用Laravel按天查询数据和分组

来自分类Dev

MS SQL 如何将分组查询结果存储在表中

来自分类Dev

SQL Server查询按字段分组错误

来自分类Dev

SQL Server查询按字段分组错误

来自分类Dev

SQL Server查询按字段分组错误

来自分类Dev

如何在ElasticSearch中按结果分组

来自分类Dev

如何在Oracle中使用PL / SQL或SQL查询将新行插入查询结果中?

来自分类Dev

如何在SQL查询中按最小值分组?

来自分类Dev

SQL查询如何在表中按名称分组

来自分类Dev

将查询结果插入表中 - SQL Server Management Studio

来自分类Dev

如何按天从两列分组中获得总延迟?

来自分类Dev

SQL Server如何使用WHILE查询从多个结果中输出一个表结果

来自分类Dev

SQL:按日期时间字段分组,但仅将日期与查询中其他位置使用的日期一起使用

来自分类Dev

如何按分组一天数据将列中的值从任何数字更改为10时的计数

来自分类Dev

将两个按查询分组在一起以获取sql server中两个表的记录数

来自分类Dev

如何使用分组依据从SqlServer查询中获取单列结果

来自分类Dev

如何在SQL Server查询中使用分组方式?

来自分类Dev

如何在SQL Server中按多列分组

来自分类Dev

如何在SQL SERVER中按名称对总计分组

来自分类Dev

如何选择按日期分组的SQL结果

来自分类Dev

在报表生成器3.0中使用的SQL查询:将结果分组在一起

Related 相关文章

  1. 1

    在SQL Server中按子查询分组

  2. 2

    在SQL Server中按子查询分组

  3. 3

    在SQL Server中按查询分组返回重复项

  4. 4

    在SQL查询中按分组

  5. 5

    如何使SQL查询按日期分组和求和结果?

  6. 6

    在SQL Server 2012中按7天窗口对班次数据进行分组

  7. 7

    对所有结果按SQL Server分组

  8. 8

    如何使用PHP将SQL查询结果存储在变量中?

  9. 9

    使用Laravel按天查询数据和分组

  10. 10

    MS SQL 如何将分组查询结果存储在表中

  11. 11

    SQL Server查询按字段分组错误

  12. 12

    SQL Server查询按字段分组错误

  13. 13

    SQL Server查询按字段分组错误

  14. 14

    如何在ElasticSearch中按结果分组

  15. 15

    如何在Oracle中使用PL / SQL或SQL查询将新行插入查询结果中?

  16. 16

    如何在SQL查询中按最小值分组?

  17. 17

    SQL查询如何在表中按名称分组

  18. 18

    将查询结果插入表中 - SQL Server Management Studio

  19. 19

    如何按天从两列分组中获得总延迟?

  20. 20

    SQL Server如何使用WHILE查询从多个结果中输出一个表结果

  21. 21

    SQL:按日期时间字段分组,但仅将日期与查询中其他位置使用的日期一起使用

  22. 22

    如何按分组一天数据将列中的值从任何数字更改为10时的计数

  23. 23

    将两个按查询分组在一起以获取sql server中两个表的记录数

  24. 24

    如何使用分组依据从SqlServer查询中获取单列结果

  25. 25

    如何在SQL Server查询中使用分组方式?

  26. 26

    如何在SQL Server中按多列分组

  27. 27

    如何在SQL SERVER中按名称对总计分组

  28. 28

    如何选择按日期分组的SQL结果

  29. 29

    在报表生成器3.0中使用的SQL查询:将结果分组在一起

热门标签

归档