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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2013, 00:38   #1
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию Запрос на группировку и сортировку

Есть запрос через ADOQuery

Код:
select akt_num,date,prof_person,prof,id_bso      from bso_main
 group by akt_num
 order by akt_num asc
Но delphi выдает ошибку, что столбцы date,prof_person,prof,id_bso не содержатся в агрегатной функции и не содержатся в GROUP BY.

Если я прописываю все столбцы в GROUP BY то все работает, но группирует неправильно.
Мне нужна группировка только по столбцу akt_num.
Как сделать запрос? База SQL Server 2008R2
Спасибо за внимание.
gigar вне форума Ответить с цитированием
Старый 14.03.2013, 08:32   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Предложение group by предполагает в обязательном порядке наличие хотя бы одной агрегатной функции (sum, count, min, max, ...).
Отсюда встречный вопрос: какое действие вы подразумеваете под термином "группировка"? Т.е. что хотите получить в результате выполнения приведенного запроса?
Прик вне форума Ответить с цитированием
Старый 14.03.2013, 08:40   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ругается, строго говоря, НЕ Delphi - а та СУБД, к которой Вы делаете запрос..

Но, по сути, ругается АБСОЛЮТНО верно.
поясню на примере.
пусть есть данные
Код:
akt_num  date          prof_person   prof 
 1              10.01.2000  Иванов      слесарь
 1              12.02.2012  Сидоров    сварщик
 2              01.01.2001  Петров      токарь
допустим, Вы группируете под akt_num
в выборке будут две записи
akt_num
1
2

вопрос. для записи с akt_num что должно быть в полях date, prof_person и т.д.
слесарь Иванов или сварщик Сидоров ?

Если Вам ВСЁ равно - то обойти такое ограничение можно через использование агрегатных функций (MIN/MAX и т.д.)
если же не ВСЁ РАВНО - тогда переделывайте логику выборки..



p.s. рекомендую ознакомиться с книгой М.Грубера "Понимание SQL", очень полезная книжка в плане освоения SQL запросов...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.03.2013, 09:11   #4
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. рекомендую ознакомиться с книгой М.Грубера "Понимание SQL", очень полезная книжка в плане освоения SQL запросов...
+1 Зачетная книга
superedward вне форума Ответить с цитированием
Старый 14.03.2013, 10:59   #5
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

Serge_Bliznykov

В таблице только akt_num разные, а все остальные поля одинаковые
gigar вне форума Ответить с цитированием
Старый 14.03.2013, 11:09   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
В таблице только akt_num разные, а все остальные поля одинаковые
ну, скорее всего, это говорит о "кривой" организации структуры БД.

впрочем, если все остальные поля одинаковы и Вы в этом уверены,
тогда:
Код:
select akt_num, min(date), min(prof_person), min(prof), min(id_bso)
from bso_main
 group by akt_num
 order by akt_num asc
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.03.2013, 12:06   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Если я прописываю все столбцы в GROUP BY то все работает, но группирует неправильно.
Цитата:
В таблице только akt_num разные, а все остальные поля одинаковые
Противорчие. Если верно 1-ое утверждение, значит не верно второе. И наоборот
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.03.2013, 14:08   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Если я прописываю все столбцы в GROUP BY то все работает, но группирует неправильно.
Аватар, согласен!

Действительно, если бы все остальные поля для одних и тех же akt_num были одинаковые, то работало бы одинаково, хоть по одному полю akt_num группировать, хоть по всем полям! gigar, анализируйте тот запрос, который с группировкой по всем полям выдаёт неверный (по вашему мнению) результат, смотрите, где akt_num повторяется, вот там и будут неодинаковые остальные поля при одинаковых akt_num...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2013, 11:38   #9
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

Спасибо, что откликнулись и помогли. Но вот хотел бы уточнить .
А если поля date будут разными, то что делать?
gigar вне форума Ответить с цитированием
Старый 22.03.2013, 11:43   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от gigar Посмотреть сообщение
Спасибо, что откликнулись и помогли. Но вот хотел бы уточнить .
А если поля date будут разными, то что делать?
так запрос не пробовали посмотреть?

Код:
select akt_num, min(date), min(prof_person), min(prof), min(id_bso)
from bso_main ....
очевидно, что если несколько разных дат,то выберется МИНИМАЛЬНАЯ дата...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Раскрыть группировку Slavatron1984 Microsoft Office Excel 5 29.12.2011 17:04
Запрос на сортировку записей по должности? Azeripatriot Microsoft Office Access 5 26.04.2010 17:06
Access – как сделать универсальную Группировку? jiura Microsoft Office Access 3 26.02.2009 22:10
Помогите переделать файловую сортировку на сортировку динамич. списков Taisja Помощь студентам 2 15.06.2008 16:10
Задача на сортировку... Sota Помощь студентам 4 25.05.2008 19:26