Cases の注文は作業が必要です。CASE
aがtrueの場合、MySQLは「CASING」を停止します
あなたの最初のCASEはWHEN (WEEKDAY(pdate) BETWEEN 0 AND 4) THEN "Normal Day"
それは平日の休日をチェックしないということです
休日を最初に確認し、次に夜勤、次に平日/週末を確認します
SELECT tbltest.datac,
(
CASE
WHEN (DATE(pdate) IN (SELECT HolidayDate FROM tblholidays)) THEN "Holiday"
WHEN (TIME(pdate) > '22:00:00' && (DAYNAME(pdate)="Sunday")) THEN "Night shift/Sunday"
WHEN (TIME(pdate) > '22:00:00') THEN "Night shift"
WHEN (WEEKDAY(pdate) BETWEEN 0 AND 4) THEN "Normal Day"
WHEN ((DAYNAME(pdate))="Saturday") THEN "Saturday"
WHEN ((DAYNAME(pdate))="Sunday") THEN "Sunday"
END) AS DayType
FROM tbltest