link5112 link5113 link5114 link5115 link5116 link5117 link5118 link5119 link5120 link5121 link5122 link5123 link5124 link5125 link5126 link5127 link5128 link5129 link5130 link5131 link5132 link5133 link5134 link5135 link5136 link5137 link5138 link5139 link5140 link5141 link5142 link5143 link5144 link5145 link5146 link5147 link5148 link5149 link5150 link5151 link5152 link5153 link5154 link5155 link5156 link5157 link5158 link5159 link5160 link5161 link5162 link5163 link5164 link5165 link5166 link5167 link5168 link5169 link5170 link5171 link5172 link5173 link5174 link5175 link5176 link5177 link5178 link5179 link5180 link5181 link5182 link5183 link5184 link5185 link5186 link5187 link5188 link5189 link5190 link5191 link5192 link5193 link5194 link5195 link5196 link5197 link5198 link5199 link5200 link5201 link5202 link5203 link5204 link5205 link5206 link5207 link5208 link5209 link5210 link5211 link5212 link5213 link5214 link5215 link5216 link5217 link5218 link5219 link5220 link5221 link5222 link5223 link5224 link5225 link5226 link5227 link5228 link5229 link5230 link5231 link5232 link5233 link5234 link5235 link5236 link5237 link5238 link5239 link5240 link5241 link5242 link5243 link5244 link5245 link5246 link5247 link5248 link5249 link5250 link5251 link5252 link5253
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
сортировка в sql и NULL
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



В документации по серверу smile.gif Кстати по какому?
Может поискать футкцию типа 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

cool.gif
 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 помогло smile.gif

Отредактировано telepath — 29/12/2004, 16:40

Вернуться в Работа с базами данных в C++Builder