Я пытаюсь создать отчет, который поможет нам определить, как мы делаем своевременную доставку заказов, но я совершенно новичок в SQL и не совсем уверен, как достичь того, что мне нужно.
Мыстремиться к отправке заказов, которые размещены в будний день до 12 вечера того же дня.Для заказов, размещенных после 12:00 в рабочий день или в выходные дни, мы планируем отправить заказ на следующий рабочий день (пн-пт).
У меня есть исходный запрос SQL, который показывает все правильные столбцы иимеет оператора CASE, но он просто проверяет, был ли заказ отправлен в течение 24 часов, но не учитывает, когда заказ был размещен или в какой день.
CASE WHEN DATEDIFF(day,order_datetime,delivery_datetime)<=1
THEN 1
ELSE 0
END AS Ontime_infull
Параметр Ontime_infull должен быть равен 1, если мы достигнем цели доставки, и 0, если нам не удастся.Я уверен, что это может быть достигнуто с помощью вложенных CASE, WHEN, и т. Д., Но просто не уверен, как это сделать.
Я использовал следующий код, который, как мне кажется, сейчас работает, но был бы хорошчтобы получить какие-либо отзывы о том, можно ли улучшить этот код ...
CASE
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Monday' AND DATEPART(hh,order_header_detail.ohd_input_datetime) < 12 AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) =0 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Monday' AND DATEPART(hh,order_header_detail.ohd_input_datetime) >= 12 AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) <=1 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Tuesday' AND DATEPART(hh,order_header_detail.ohd_input_datetime) < 12 AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) =0 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Tuesday' AND DATEPART(hh,order_header_detail.ohd_input_datetime) >= 12 AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) <=1 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Wednesday' AND DATEPART(hh,order_header_detail.ohd_input_datetime) < 12 AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) =0 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Wednesday' AND DATEPART(hh,order_header_detail.ohd_input_datetime) >= 12 AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) <=1 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Thursday' AND DATEPART(hh,order_header_detail.ohd_input_datetime) < 12 AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) =0 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Thursday' AND DATEPART(hh,order_header_detail.ohd_input_datetime) >= 12 AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) <=1 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Friday' AND DATEPART(hh,order_header_detail.ohd_input_datetime) < 12 AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) =0 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Friday' AND DATEPART(hh,order_header_detail.ohd_input_datetime) >= 12 AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) <=3 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Saturday' AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) <=2 THEN 1
WHEN DATENAME(dw,order_header_detail.ohd_input_datetime) = 'Sunday' AND DATEDIFF(Day,order_header_detail.ohd_input_datetime,delivery_header.dh_datetime) <=1 THEN 1
ELSE 0
END AS Ontime_infull
Любая помощь будет принята с благодарностью.