Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510

Как отсортировать БД по сумме 85 идущих подрят полей?

31.10.2013, 16:07. Показов 1452. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Схема подключения: TADOConnection->TADOQuery.
У меня есть БД длинной в 85 полей, формат названий которых следующий: n-m-x-y. n в диапазоне (1-3 включительно) m(1-2) x(1-7) y(1-2).
Нужно отсортировать БД по сумме этих полей.
SQL начал изучать недавно, и возник вопрос: Есть ли в SQL аналог for, c помощью которого можно это сделать, или нужно работать с for изнутри Delphi для построения нужного запроса и если в SQL есть for, то как его использовать?
Заранее благодарен за ответы,
proggamer12.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.10.2013, 16:07
Ответы с готовыми решениями:

Дано предложение. Найти наибольшее количество идущих подрят пробелов
Дано предложение. Найти наибольшее количество идущих подрят пробелов. помоте плиз

Отсортировать числа в строках матрицы по количеству делителей и отсортировать строки по сумме цифр
Помогите с программой, пожалуйста В файле 25 чисел. Вывести на экран матрицу 5х5 отсортировав числа в строках по количеству делителей и...

Как отсортировать двумерный массив по сумме элементов в строке
Дан массив 4 4 5 5 5 5 5 5 5 5 5 4 4 5 4 надо чтоб получилось 5 5 5 5 5 4 4 5 5 5 5 4 4 5 4

23
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
31.10.2013, 16:23
Цитата Сообщение от proggamer12
Есть ли в SQL аналог for, c помощью которого можно это сделать
Нет. SQL - не процедурный язык, а декларативный, поэтому никаких циклов там быть не может. Некоторые производители СУБД делают расширения SQL для добавления процедурных возможностей, но это уже другая история (расширения в каждой СУБД свои).

Цитата Сообщение от proggamer12
или нужно работать с for изнутри Delphi для построения нужного запроса
Да
1
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510
31.10.2013, 18:45  [ТС]
Спасибо!

Добавлено через 1 час 30 минут
Возник ещё один вопрос: мне ещё нужно вычислять поле Сумма для каждой строки. Это можно сделать в SQL-запросе? (Думаю что нет, но тогда как это сделать - не перебирать же каждый элемент через FieldByName)

Добавлено через 48 минут
Кто-нибудь знает решение?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
31.10.2013, 18:51
Цитата Сообщение от proggamer12 Посмотреть сообщение
мне ещё нужно вычислять поле Сумма для каждой строки
SQL
1
2
SELECT s1+s2+s3+s4+s5 AS MySum
FROM MyTable
1
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510
01.11.2013, 12:23  [ТС]
У меня в книжке (Золотая книга Delphi) не упоминается про AS. Не могли бы вы объяснить - что это значит?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
01.11.2013, 12:27
fld1 AS Name1

Назначение полю другого наименования (псевдонима, алиаса). На это имя можно потом ссылаться извне запроса или в охватывающем запросе (если алиас назначается в подзапросе). Если это просто поле, то это м.б. для удобства. Если поле вычислимое, то оно собоственного имени не имеет, поэтому алиас назначается гораздо чаще, чем для обычного поля.

PS
SQL все таки лучше изучать по соответствующим книгам (например, Мартин Грабер), а не по книге про Delphi
1
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510
01.11.2013, 12:28  [ТС]
Спасибо!
0
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510
03.11.2013, 12:47  [ТС]
Возникло ещё два вопроса:
1) Не подскажете, как сделать так, чтобы из полей Фам, Имя, Отч создавалось поле ФИО, которое было-бы строкой, соединяющей эти три поля, но чтобы в этом поле Фам, Имя и Отч были разделены пробелами?
2) Какая есть хорошая книжка по SQL?

Искренне благодарен,
proggamer12

Добавлено через 1 час 5 минут
С первым вопросом разобрался:
SQL
1
SPACE(1)
0
 Аватар для Valenth
120 / 110 / 19
Регистрация: 04.11.2013
Сообщений: 471
04.11.2013, 13:47
Цитата Сообщение от proggamer12 Посмотреть сообщение
Не подскажете, как сделать так, чтобы из полей Фам, Имя, Отч создавалось поле ФИО, которое было-бы строкой, соединяющей эти три поля, но чтобы в этом поле Фам, Имя и Отч были разделены пробелами?
Всё зависит от того, какой SQL используете: MySQL, SQL Server, и т.д. Синтаксис отличается.

Цитата Сообщение от proggamer12 Посмотреть сообщение
Какая есть хорошая книжка по SQL?
Аналогично, лучше брать книгу, соответствующую выбранной SQL. Или Вам чистые основы?
0
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510
04.11.2013, 15:15  [ТС]
Я работаю с Delphi->ADO->Access.
0
 Аватар для Valenth
120 / 110 / 19
Регистрация: 04.11.2013
Сообщений: 471
04.11.2013, 15:24
У мелкомягких есть справка, где можно и основы изучить, и что-то посерьёзней. А в самой программе Microsoft Access есть построитель SQL-кода.


http://office.microsoft.com/ru... A010256402
http://office.microsoft.com/ru... aspx?CTT=1
http://office.microsoft.com/ru... aspx?CTT=1
0
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510
07.11.2013, 18:31  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
SQL
1
2
SELECT s1+s2+s3+s4+s5 AS MySum
FROM MyTable
SQL
1
 
Я могу написать так:
SQL
1
ORDER BY MySum
?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
07.11.2013, 18:38
Цитата Сообщение от proggamer12 Посмотреть сообщение
Я могу написать так:
Не можете. Можете написать так:
SQL
1
2
3
4
SELECT * FROM
  (SELECT s1+s2+s3+s4+s5 AS MySum
  FROM MyTable)
ORDER BY MySum
1
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
07.11.2013, 18:39
или так
SQL
1
2
3
SELECT s1+s2+s3+s4+s5 AS MySum
FROM MyTable
ORDER BY s1+s2+s3+s4+s5
0
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510
07.11.2013, 18:39  [ТС]
Спасибо!
0
 Аватар для Valenth
120 / 110 / 19
Регистрация: 04.11.2013
Сообщений: 471
07.11.2013, 18:52
А так разве не катит?
SQL
1
2
3
SELECT s1+s2+s3+s4+s5 AS MySum
FROM MyTable
ORDER BY 1
Во всяком случае, MySQL так умеет, не знаю как другие БД.
1
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
07.11.2013, 19:01
Цитата Сообщение от Valenth Посмотреть сообщение
А так разве не катит?
Катит, но так лучше не делать, т.к. номер столбца может измениться.
Можно так:
SQL
1
2
3
SELECT s1+s2+s3+s4+s5 AS MySum
FROM MyTable
ORDER BY MySum
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
07.11.2013, 19:03
Цитата Сообщение от FIL Посмотреть сообщение
Можно так
В Access, например, такое не прокатывает. Говорит, что не знает такого параметра MySum и просит его ввести.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
07.11.2013, 19:15
Цитата Сообщение от Waddonator Посмотреть сообщение
В Access, например, такое не прокатывает. Говорит, что не знает такого параметра MySum и просит его ввести.
Я в MSSQL пробовал.
Думаю твой вариант из #13 наиболее правильный и универсальный. Только MSSQL просит еще там имя таблице от подзапроса задать.
0
17 / 17 / 4
Регистрация: 06.07.2012
Сообщений: 510
09.11.2013, 13:46  [ТС]
Я сделал с помощью цикла заполнение TADOQuery.SQL строками.
На 60-ой строке, похоже, кочнается память и строка выводится не до конца, а на последней строке '...'
Выглядит так:
n-m-x...

хотя должно быть
n-m-x-y+
n-m-x-y+
и т.д.

Вообще, длина названия поля гораздо больше - "n-й пользователь-m-й компьютер-x-й мышь-y-я клавиатура"
(Названия другие, эти - для примера)

По подсчётам настоящих названий получается, что на сумму всех полей требуется 132090 символов. Их можно вместить хоть как-то?

P. S. крайний вариант: убрать слова пользователь мышь клавиатура компьютер и оставить лишь n-m-x-y...

Добавлено через 6 минут
Попробовал создавать запрос без текстовых комментариев (пользователь, мышь, клавиатура, компьютер) и места в SQL хватило. А какой в нём (в SQL) лимит символов?

Добавлено через 10 минут
И тогда возникает ещё один вопрос: как убрать из названий всех этих 85 полей строки "й пользователь", "й компьютер", "й мышь", "я клавиатура", чтобы осталось только n-m-x-y ("-" из "-й" удалять не надо)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2013, 13:46
Помогаю со студенческими работами здесь

Как отсортировать столбцы двумерного массива по возрастанию (по сумме столбцов)?
Не понимаю, алгоритма сортировки, пожалуйста помогите

List<T>: как отсортировать данный список по одному из полей
Есть список List&lt;MyClass&gt;. Подскажите, как отсортировать данный список по одному из полей объекта, типа MyClass.

Вопрос по форме и сумме полей таблицы
Здраствуйте. Хочу сделать Бд для работы, для частных заказов всё проектируется потихоньку и вроде как правильно ,но вот кое что меня...

Delphi сортировка по сумме нескольких полей
Здравствуйте. Есть БД формата *.mdb, схема подключения - ADOConnection-&gt;ADOTable. В БД есть таблица Table1, к которой подключен...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru