Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Есть запрос через 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
Сообщений: 874
Репутация: 266
По умолчанию

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

ругается, строго говоря, НЕ 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
Репутация: 70
По умолчанию

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

Serge_Bliznykov

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

Цитата:
В таблице только 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
Адрес: Северодонецк.ua
Сообщений: 18,856
Репутация: 6688
По умолчанию

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Раскрыть группировку 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 23:10
Помогите переделать файловую сортировку на сортировку динамич. списков Taisja Помощь студентам 2 15.06.2008 16:10
Задача на сортировку... Sota Помощь студентам 4 25.05.2008 19:26


15:37.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru