Я стараюсь управлять командой доставки. Вот почему я хочу отобразить таблицу. Первая строка будет завершена днем. И следующие строки будут заполнены состояниями и их продолжительностью. Строка «дата» должна содержать все дни месяца. Даже если никто не работает.Слева Join/OR - [SQL ACCESS]
- First table (typeState) -
deliveryStatusDuration //State Time (seconds) INTEGER
deliveryStatus //Type Status INTEGER
startStatus //Start of the state DATE
endStatus //End of the state DATE
deliveryCarNum //deliverer identifier INTEGER
- Second table (dateTable) -
dateInt // Just an integer (from 1 to 31) INTEGER
My SQL запрос:
SELECT SUM(deliveryStatusDuration) AS DURATION, deliveryStatus, datetable.dateInt
FROM datetable
LEFT JOIN typeState ON datetable.dateInt = DAY(typeState.startStatus)
WHERE deliveryCarNum=:CarNum
AND startStatus >= :DateStart
AND endStatus <= :DateEnd
AND (typeState.startStatus Is Null)
OR (typeState.deliveryStatus Is Null)
OR datetable.dateInt <= DAY(:DateEnd)
GROUP BY datetable.dateInt, deliveryStatus
Проблема заключается в том, что независимо от месяца используется, отображается вся информация. Я думаю, что «ИЛИ» уничтожает мой «И», поэтому у меня нет тех дней, когда начинается состояние. Например, если человек доставки начинает сдавать 4 мая 2016 года и заканчивается 8 мая 2016 года; моя просьба не указана 4 августа. 1 2 3 5 6 7 8 9 10 ... 31
Закрепите круглые скобки, чтобы реализовать логику, которую вы действительно хотите. –
Также, если вы хотите, чтобы все целые числа даты были включены, переместите условия typestate из предложения where в оператор join. Помещение их в предложение where ограничит ваш весь результат, поставленный ими, тогда как помещение их в качестве условий соединения ограничит то, что позволяет сопоставлять и быть включенным из типичной таблицы – Matt