How I can group the results by day in this query with SQL Server? How I can group the results by day in this query with SQL Server? sql-server sql-server

How I can group the results by day in this query with SQL Server?


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 dLEFT JOIN        DiaryTimetable AS dtON      dt.IdDiary = d.IdDiaryWHERE   userid = 1409GROUP BY        d.IdDay


I use the code from @Quassnoi and I added this:

SELECT DATENAME(weekday, d.idday-1) as 'Day' ,       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 dLEFT JOIN DiaryTimetable AS dt ON dt.IdDiary = d.IdDiaryWHERE userid = 1409GROUP BY d.IdDay

I hope this help someone, thanks all for your answers.


The way I'd approach this would be to work out your standard and extra hours separately, something like this;

SELECT d.IdDay    ,MIN(dt.StartTime) AS 'Start Time'    ,MAX(dt.EndTime) AS 'End Time'    ,MIN(ex.StartTime) AS 'Start Extra Time'    ,MAX(ex.EndTime) AS 'End Extra Time'FROM Diary AS dLEFT JOIN (    SELECT IdDiary        ,MIN(Hour) AS StartTime        ,MAX(Hour) AS EndTime    FROM DiaryTimetable    GROUP BY IdDiary    ) AS dt ON d.IdDiary = dt.IdDiary    AND d.IsAnExtraHour = 0LEFT JOIN (    SELECT IdDiary        ,MIN(Hour) AS StartTime        ,MAX(Hour) AS EndTime    FROM DiaryTimetable    GROUP BY IdDiary    ) AS ex ON d.IdDiary = ex.IdDiary    AND d.IsAnExtraHour = 1WHERE userid = 1409GROUP BY d.IdDay