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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2013, 10:54   #1
xsaroo
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 40
По умолчанию Сортировка(пустые значения в конце)

Всем привет вопрос вроде легкий но я что то не могу его решит.
Есть таблица "Алфавитный" в которой есть поле "Автор" так вот нужно сделать сортировку по алфавиту но чтобы пустые значения выводились в конце .(Обычную сортировку знаю как делать но эту увы).
У меня выводится
"пусто"
"пусто"
"Лев"
"Пушкин"

А надо
"Лев"
"Пушкин"
"пусто"
"пусто"

Использую код
Код:
procedure TForm3.FormCreate(Sender: TObject);
begin
with ADOQuery1 do begin
      Close;
      SQL.Text:='select * from Алфавитный ORDER BY Фамилия_имя_отчество_автора';
      Open;
    end;
end;

Последний раз редактировалось xsaroo; 11.06.2013 в 11:01.
xsaroo вне форума Ответить с цитированием
Старый 11.06.2013, 11:04   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

"пустын" ячейки нужно заменять при выборе так чтобы они вывелись в конец
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 11.06.2013, 11:24   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В T-SQL такое прокатило
Код:
SELECT * FROM ieiz 
  ORDER BY CASE WHEN ikei IS NULL THEN REPLICATE(CHAR(255),20) ELSE ikei END
здесь пустые именно с NULL, 20 - длина поля ikei. Если без REPLICATE, а просто CHAR(255), то начинающиеся с 'я' лезут в самый конец
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.06.2013, 13:26   #4
xsaroo
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В T-SQL такое прокатило
Код:
SELECT * FROM ieiz 
  ORDER BY CASE WHEN ikei IS NULL THEN REPLICATE(CHAR(255),20) ELSE ikei END
здесь пустые именно с NULL, 20 - длина поля ikei. Если без REPLICATE, а просто CHAR(255), то начинающиеся с 'я' лезут в самый конец
Написал так но что то не прокатывает
Код:
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
with ADOQuery1 do begin
      Close;
      SQL.Text:='SELECT * FROM Фамилия_имя_отчество_автора ORDER BY CASE WHEN Фамилия_имя_отчество_автора IS NULL THEN REPLICATE(CHAR(255),20) ELSE Фамилия_имя_отчество_автора ';
      Open;
    end;
end;
xsaroo вне форума Ответить с цитированием
Старый 11.06.2013, 13:58   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. Далеко не уверен, что T-SQL подойдет для вашей СУБД
2. Вы даже скопипастить нормально не смогли
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.06.2013, 14:44   #6
xsaroo
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 40
По умолчанию

По гуглу написал вот так:
Код:
procedure TForm3.Button1Click(Sender: TObject);
begin
with ADOQuery1 do begin
Close;
SQL.Text:='Select Фамилия_имя_отчество_автора, isFirst = CASE WHEN Фамилия_имя_отчество_автора IS NULL THEN 1 ELSE 0 END FROM Алфавитный ORDER BY isFirst, Фамилия_имя_отчество_автора';
Open;
end;
end;
Ток все равно не работает. Помогите нубу, только из за этого задание сдать не могу.
xsaroo вне форума Ответить с цитированием
Старый 11.06.2013, 15:25   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) Вы бы писали - как именно оно не работает!
2) какая у Вас СУБД?
3)
ну, попробуйте так:
Код:
SQL.Text:='Select Фамилия_имя_отчество_автора, '+
 '  CASE WHEN Фамилия_имя_отчество_автора IS NULL THEN 1 ELSE 0 END as isFirst '+
 ' FROM Алфавитный ORDER BY isFirst, Фамилия_имя_отчество_автора';
p.s. на несколько строчек разбил исключительно для наглядности, на это внимания не обращайте...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.06.2013, 15:48   #8
xsaroo
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) Вы бы писали - как именно оно не работает!
2) какая у Вас СУБД?
3)
ну, попробуйте так:
Код:
SQL.Text:='Select Фамилия_имя_отчество_автора, '+
 '  CASE WHEN Фамилия_имя_отчество_автора IS NULL THEN 1 ELSE 0 END as isFirst '+
 ' FROM Алфавитный ORDER BY isFirst, Фамилия_имя_отчество_автора';
p.s. на несколько строчек разбил исключительно для наглядности, на это внимания не обращайте...
база данных создана в Access. Делфи используется как управляющая среда. Щас пробнем. Что на счет ошибки он пишет"Не известная ошибка"
xsaroo вне форума Ответить с цитированием
Старый 11.06.2013, 19:41   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

в ACEESS вместо case - IIF. Вместо is null - IsNull
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка значения массива в Бейсике Турсунали Помощь студентам 0 17.12.2012 21:07
Как убрать ненужный символ в конце значения ячейки? 27obesthand Microsoft Office Excel 3 18.10.2011 11:44
положительные или отрицательные значения в конце строки olimpus Microsoft Office Excel 2 06.02.2011 10:41
после добавления таблицы в конце файла появляются пустые строки OLEG'arh Microsoft Office Word 4 17.09.2010 16:11
пустые ячейки StasSv Microsoft Office Excel 5 22.12.2008 17:43