Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2009, 15:05   #1
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию Сортировка данных

Как сделать запрос на выборку так, чтобы при сортировке данных по какому-либо полю (неважно какому и неважно сортировка идет по убыванию или возрастанию), первым всегда шла запись, у которой значение поля key_kategory = 0?
SlavaSH вне форума Ответить с цитированием
Старый 04.09.2009, 17:09   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Код:
select 
  [список неважно каких полей],
  key_kategory
from your_table
where 0=0
   and [условия отбора по неизвестно каким полям]
order by key_kategory asc, [сортировка по неизвестно каким полям]
soleil@mmc вне форума Ответить с цитированием
Старый 04.09.2009, 18:29   #3
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
Код:
select 
  [список неважно каких полей],
  key_kategory
from your_table
where 0=0
   and [условия отбора по неизвестно каким полям]
order by key_kategory asc, [сортировка по неизвестно каким полям]
что-то я не понял а зачем where 0=0 ?

и что значит key_kategory asc? мне не нужно, чтобы сортировка была сначала по полю key_kategory, а потом по остальным. Мне нужно чтобы первым была запись, у которой key_kategory=0, а остальные уже как пользователь хочет по имени, по дате и др.
SlavaSH вне форума Ответить с цитированием
Старый 04.09.2009, 18:47   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,528
По умолчанию

select 0 f1, [мои поля]
form tbl
where key_kategory=0
union
select 1 f1, [мои поля]
from tbl
where key_kategory<>0 and [мои условия]
order by 1 asc, [моя сортировка]
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 04.09.2009, 19:42   #5
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
select 0 f1, [мои поля]
form tbl
where key_kategory=0
union
select 1 f1, [мои поля]
from tbl
where key_kategory<>0 and [мои условия]
order by 1 asc, [моя сортировка]

нифига себе вы тут, ребята, мутите тему какую-то....
а можно пояснить что такое union, а так же 0 и 1 зачем здесь?
SlavaSH вне форума Ответить с цитированием
Старый 04.09.2009, 20:54   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а можно пояснить что такое union
объединить результаты нескольких (в данном случае - двух) запросов (вернуть результаты этих запросов как единую выборку. Первая часть запроса выберет из таблицы те строчки таблицы tbl, в которых key_kategory=0
вторая часть запроса выберет те строчки таблицы tbl, где key_kategory не равно нулю.

Цитата:
0 и 1 зачем здесь?
для того, чтобы по этому полю можно было отсортировать:
Код:
...order by 1 asc
это нужно, чтобы выполнить Ваше исходное условие - чтобы сначала шли строчки с key_kategory=0
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.09.2009, 22:53   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от SlavaSH Посмотреть сообщение
что-то я не понял а зачем where 0=0 ?

и что значит key_kategory asc? мне не нужно, чтобы сортировка была сначала по полю key_kategory, а потом по остальным. Мне нужно чтобы первым была запись, у которой key_kategory=0, а остальные уже как пользователь хочет по имени, по дате и др.
я считаю, что дал нормальный абстрактный ответ на ваш абстрактный вопрос
если хотите конкретики, то добавьте в вопрос структуру таблиц с описанием полей, исходный набор данный и результирующий набор (после применения сортировки)

З.Ы.: на СКЛ можно сделать все, ладно - почти все, главное, знать что ты хочешь получить

Последний раз редактировалось soleil@mmc; 04.09.2009 в 22:55.
soleil@mmc вне форума Ответить с цитированием
Старый 05.09.2009, 03:43   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от soleil@mmc
на СКЛ можно сделать все, ладно - почти все, главное, знать что ты хочешь получить

очень многое зависит и от СУБД (к примеру, FireBird версии <1.53 НЕ ПОДДЕРЖИВАЛ ВЛОЖЕННЫХ ЗАПРОСОВ. А без них часто ой как тяжело! ) и от конкретной задачи...

А вот конкретные замечания, по обсуждаемой задаче.
Хочу добавить, что оба предложенных способа имеют недостатки и правильность их работы зависит от диапазона возможных значений в поле key_kategory:
1-й способ неверно сработает, если key_kategory может принимать отрицательные значения.
2-й способ - вообще может выбрать НЕ ВСЕ СТРОКИ из таблицы, если key_kategory может быть NULL...
так что - автору топика подсказали пути решения - а дальше дело за ним!

SlavaSH, дружеский совет: учите SQL - это и крайне увлекательно и весьма полезно!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.09.2009, 17:16   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
к примеру, FireBird версии <1.53 НЕ ПОДДЕРЖИВАЛ ВЛОЖЕННЫХ ЗАПРОСОВ
здесь всегда можно воспользовать ХП
soleil@mmc вне форума Ответить с цитированием
Старый 07.09.2009, 22:58   #10
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Итак, поясняю, база данных FireBird v1.50. Такое же мне будет необходимо проделать и для базы данных Access.

полная струкрута таблицы (взял самый простой пример):

Название таблицы PRODUCT_KATEGORY
Поля:
KEY_PRODUCT_KATEGORY integer
name_PRODUCT_KATEGORY varchar 50

Проверил предложенные варианты в FireBird пока.

при выполнении запроса
Код:
select 
  name_PRODUCT_KATEGORY,
  KEY_PRODUCT_KATEGORY
from PRODUCT_KATEGORY
where 0=0
order by KEY_PRODUCT_KATEGORY asc, name_PRODUCT_KATEGORY desc
делает совсем не то, что нужно, как я и предполагал. Он просто сортирует по KEY_PRODUCT_KATEGORY, а это совсем не то, что нужно.

при выполнении запроса
Код:
select 0 f1, KEY_PRODUCT_KATEGORY, NAME_PRODUCT_KATEGORY from PRODUCT_KATEGORY where KEY_PRODUCT_KATEGORY=0
union
select 1 f1, KEY_PRODUCT_KATEGORY, NAME_PRODUCT_KATEGORY from PRODUCT_KATEGORY  where KEY_PRODUCT_KATEGORY <> 0
ORDER BY 1 asc, NAME_PRODUCT_KATEGORY
вылазиет такая ошибка
Код:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.а
Invalid command.
invalid ORDER BY clause.
SlavaSH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка данных (пересчет возможных вариантов комбинаций, перенос данных в таблицу) Vitalik85 Microsoft Office Excel 4 12.08.2009 00:30
сортировка данных oleg_sh Microsoft Office Excel 7 30.07.2009 20:54
Сортировка данных Laidy Microsoft Office Excel 6 28.10.2008 10:29
Сортировка данных celovec Общие вопросы Delphi 1 01.08.2007 14:19
Сортировка данных Таня84 БД в Delphi 7 20.02.2007 15:56