telepath |
Отправлено: 29.12.2004, 13:25 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Не подскажете как отсортировать такую табличку правильно
не по id и не по Name
id — n1 — n2 — n3 — n4 — n5 — Name это поля
-------------------------------------------------
1 — 1 — null — null — null — null — rec1 это данные
2 — 1 — 1 — null — null — null — rec2
запрос типа:
CODE | select * from table order by n1,n2,n3,n4,n5 |
выставляет записи таким образом:
2 — 1 — 1 — null — null — null — rec2
1 — 1 — null — null — null — null — rec1 |
|
AVC |
Отправлено: 29.12.2004, 14:27 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Что значит правильно?
То что делает сервер и есть правильно. А если проблемы с null то можно
использовать:
функцию преобразования null к чему-то
или
поискать установку параметра сортировки — null вперед/назад
или
сделать конкатенацию полей (функцию над полями) и сортировать по результату |
|
telepath |
Отправлено: 29.12.2004, 14:30 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
А где примерно искать опцию null вперед/назад ? |
|
AVC |
Отправлено: 29.12.2004, 14:35 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
В документации по серверу Кстати по какому?
Может поискать футкцию типа IsNull (), NVL() ... |
|
telepath |
Отправлено: 29.12.2004, 15:05 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Firebird, работаю через FIB
|
|
avc* |
Отправлено: 29.12.2004, 15:30 |
|
Не зарегистрирован
|
Мне кажется FB в базовом комплекте установок нет, функция типа IsNull есть, только имеет какое то странное название — ни как не вспомню какое.
Вот еще нашел у себя на диске
QUOTE |
SQL Language Extension: ORDER BY clause can specify expressions and nulls placement
Syntax
========
SELECT ... FROM .... ORDER BY order_list ....;
order_list : order_item [, order_list];
order_item : [order_direction] [nulls_placement]
order_direction : ASC | DESC;
nulls_placement : NULLS FIRST | NULLS LAST;
The ORDER BY clause lets you specify any valid expressions to
sort query results. If expression is consisted of a single number
it is interpreted as column number. The nulls_placement clause
controls ordering of nulls in result set. They can be sorted
either above (NULLS FIRST) or below (NULLS LAST) of all other values.
Behaviour when nulls_placement is unspecified is NULLS LAST.
Author:
Nickolay Samofatov
N O T E S
=========
- Index is never used for ordering if you specify NULLS FIRST
as a nulls_placement
- Results are undefined if you ask engine to sort results using
non-deterministic UDF or stored procedure.
- Amount of procedure invocations is undefined if you ask engine to
sort results using UDF or stored procedure in any case even
if you reference column calling procedure by number
- You can use only numbers to reference columns to sort unions
Examples
========
A)
SELECT * FROM MSG
ORDER BY PROCESS_TIME DESC NULLS FIRST
SELECT FIRST 10 * FROM DOCUMENT
ORDER BY STRLEN(DESCRIPTION) DESC
C)
SELECT DOC_NUMBER, DOC_DATE FROM PAYORDER
UNION ALL
SELECT DOC_NUMBER, DOC_DATA FROM BUDGORDER
ORDER BY 2 DESC NULLS LAST, 1 ASC NULLS FIRST
| |
|
telepath |
Отправлено: 29.12.2004, 15:38 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Огромное спасибо asc nulls first помогло
Отредактировано telepath — 29/12/2004, 16:40 |
|