sql fiddle demo hereLàm thế nào tôi có thể nhóm các kết quả theo ngày trong truy vấn này với SQL Server?
Tôi có cấu trúc này bảng cho bảng Diary:
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);
Và cấu trúc này cho bảng 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');
tôi đã sử dụng truy vấn này để có được những giờ max và giờ phút cho userid 1409, để có được mỗi ngày thời gian đó nhập và thời gian mà rời khỏi công việc. Ngày idday tương ứng với số ngày trong tuần. Ví dụ 1 là thứ hai, thứ ba là 2 vv ...
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
Truy vấn này cho kết quả này:
Tôi muốn để có được kết quả này:
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
tôi có một cột (IsAnExtraHour) cột này cho biết nếu hàng này có thêm giờ trong một ngày, ví dụ như một công việc bắt đầu sử dụng lao động vào thứ hai tại 09:00 đến 11:00 và sau đó hoạt động trở lại vào buổi chiều lúc 15: 00-17: 00, vì vậy tôi muốn biết làm thế nào tôi có thể nhóm giờ này trong cùng một hàng, tôi hy vọng tôi đã có thể thể hiện rõ ràng, tôi chấp nhận lời đề nghị cảm ơn.
Đó là cách người ta nên đặt câu hỏi SQL. Tất cả đều làm như Esraa_92! – Quassnoi
Cảm ơn bạn đã bình luận của bạn ;-D –
Không sử dụng dấu nháy đơn cho bí danh cột. Để tránh nhầm lẫn và khó tìm lỗi, bạn nên sử dụng dấu nháy đơn chỉ cho chuỗi và ngày/thời gian hằng số. –