1. Что означают «1ААААА» и «2»?
Это буквальные константы.
2. в чем смысл || верхняя (id.name)
||
- стандартный оператор конкатенации SQL. 'A' || «B» производит «AB».
ИМХО, ваш вопрос в том, что означает весь order by case
, так что, пошлите шаг за шагом:
ORDER BY
(
CASE
WHEN r.id BETWEEN 900 AND 999 THEN '1AAAAA'
ELSE '2'
|| upper(id.name)
END) ASC,
r.date DESC ;
Это упорядочит ваш результирующий набор по результату вычисления выражения регистра (по возрастанию), затем по r.date (потомок).
Дело просто вернет '1AAAAA' для любого идентификатора от 900 до 999 (это будет заказано r.date, помните? '
Для любого другого значения он объединяет 2 перед id.name.
Это гарантирует, что любая запись с идентификатором от 900 до 999 появится в первой «группе», которая упорядочена по дате, по убыванию. Затем вторая группа будет содержать все остальные записи, упорядоченные по верхнему имени, а затем по дате.
Возможно, вы захотите увидеть эти данные, чтобы понять, как это работает ... просто добавьте выражение case к вашему оператору select в качестве нового столбца.
Например, если ваш запрос начинается так:
SELECT r.id, id.name
FROM
добавить кейс, например, так:
SELECT r.id, id.name
,
CASE
WHEN r.id BETWEEN 900 AND 999 THEN '1AAAAA'
ELSE '2'|| upper(id.name)
END ORDER_CRITERIA
FROM
Это поможет вам понять, что происходит с этим выражением, поскольку вы увидите произведенные данные в качестве последнего столбца вашего запроса.