У меня возникли проблемы с выяснением правильного синтаксиса для того, что мне нужно для вывода из моего запроса.Ограничить вывод строки
Вот мои данные (нет, это не правильные имена столбцов, я пытаюсь упростить их чтение). Фактическая таблица, из которой я выхожу, имеет 26 столбцов данных.
employeeNumber - recordNumber - job - dept - type
12 - 1 - stapler - 788 - s
12 - 6 - paper pusher - 400 - s
18 - 2 - phone cleaner - 600 - p
18 - 4 - sweeper - 567 - s
19 - 0 - typist - 400 - s
21 - 0 - mouse ball cleaner - 400 - p
Итак, вот правила отбора:
Если тип P выбрать эту запись
Если работник не имеет P записи, выберите S
Если сотрудник имеет несколько записей S, выберите нижний номер записи ИЛИ выберите запись о том, что Департамент НЕ 400 (400 строка всегда с большим номером записи)
Если есть только один S записи, и Dept 400 строка должна быть возвращена
Это то, что является В настоящее время работает:
SELECT employeeNumber, recordNumber, job, dept, type
FROM employees
WHERE (type = 'P')
OR
(type = 'S'
AND employeeNumber NOT IN
(
SELECT employeeNumber
FROM employees
WHERE type = 'P'
)
)
ORDER BY employeeNumber, recordNumber
И то, что я хочу сделать, это поставить «предел = 1» (или что-то подобное) в конце, так что в случае нескольких строк S нижний RecordNumber будет строка, которая является вернулся.
Это набор записей, которые должны быть возвращены из данных выше:
employeeNumber - recordNumber - job - dept - type
12 - 1 - stapler - 788 - s
18 - 2 - phone cleaner - 600 - p
19 - 0 - typist - 400 - s
21 - 0 - mouse ball cleaner - 400 - p
Ясно как грязь, не так ли?
Я продолжаю получать ошибки. Есть ли «простой» способ сделать это, что я просто отсутствую?
Спасибо за любую помощь, которую вы можете дать.
Мишель
OR, относящийся к более низкому номеру записи/не отделу 400, был только там для информации. Вы правы, для этого достаточно левых. Я дам вам немного попробовать попробовать (я сейчас в колене в другой проблеме). – Michelle