我的查询列出了一周中所有日期的工作时间表以及半小时增量的时间。
SELECT ID,
CallCenterScheduleID As WorkScheduleID,
C.DayOfWeekID,
C.TimeOfDayID,
T.DisplayValue TimeDisplayName,
W.DayOfWeekName WeekDisplayName
FROM tblCallCenterCapacityDetail C
INNER JOIN tblWeekDay W
ON C.DayOfWeekID = W.DayOfWeekID
INNER JOIN tblTimeOfDay T
ON C.TimeOfDayID = T.TimeOfDayID
WHERE CallCenterScheduleID = 75
ORDER BY
CASE
WHEN C.DayOfWeekID = 6 AND T.DisplayValue = '2:30 PM' THEN 0
ELSE 1
END ASC
以上查询显示此结果
必需:
WeekDisplayName每天有48条记录,就像你在星期三看到的那样,你首先看到前19条记录,其余记录出现在结果的末尾。我需要将所有48条记录放在一起,然后在接下来的每一天放置48条记录。
星期三之后,周四的第一张唱片的时间是凌晨12点,我需要显示与Wednesay一样的时间。正如您所看到的,周三显示的第一个记录在下午2:30有时间,但与周四相关的第20行显示的是上午12:00。 我需要每周下午2:30显示时间。
答案 0 :(得分:0)
上述问题的可能解决方案是根据时间对记录进行分区,然后根据首选日期的值进行排序。
以下查询可以解决问题。
SELECT ID,
CallCenterScheduleID,
C.DayOfWeekID,
C.TimeOfDayID,
T.DisplayValue TimeDisplayName,
W.DayOfWeekName WeekDisplayName,
row_number()
OVER(
partition by C.DayOfWeekID
ORDER BY
CASE
WHEN
T.DisplayValue = '2:30 PM'
THEN 0
ELSE 1
END ASC
) AS ROWNUM
FROM tblCallCenterCapacityDetail C
INNER JOIN tblWeekDay W
ON C.DayOfWeekID = W.DayOfWeekID
INNER JOIN tblTimeOfDay T
ON C.TimeOfDayID = T.TimeOfDayID
WHERE CallCenterScheduleID = 75
ORDER BY
CASE
WHEN
C.DayOfWeekID = 1
THEN 0
ELSE 1
END ASC
由于每天有48条记录,因此每天的记录组合在一起,每天下午2:30设置为第一条记录。