|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.09.2009, 00:03 | #1 |
Пользователь
Регистрация: 12.08.2009
Сообщений: 62
|
Дублирующиеся строки в DBGrid
Хочу вернуться еще раз к данному вопрусу, и надеюсь на вашу помощь.
Имею БД Access которая состоит из несколька таблиць, и вот я формирую запрос на выборку из несколька таблиц и по ключевым полям. Пример: DM.ADOQuery2.Close; DM.ADOQuery2.SQL.Clear; DM.ADOQuery2.SQL.Add('SELECT ObjList.Number, ObjList.Name, '); DM.ADOQuery2.SQL.Add('ObjList.Addre ss, EvType.Name,EvType.Name,'); DM.ADOQuery2.SQL.Add('EvList.Info, Person.Status,'); DM.ADOQuery2.SQL.Add('Person.FirstN ame,FROM'); DM.ADOQuery2.SQL.Add('EvList, EvType, ObjList, Person WHERE'); DM.ADOQuery2.SQL.Add('EvList.EvId=E vType.ID AND EvList.ObjId=ObjList.ID AND'); DM.ADOQuery2.SQL.Add('EvList.Operat orID=Person.ID AND EvType.ID=2621'); DM.ADOQuery2.Open; Запрос работает, выберает в DBGrid данные которые повторяются Пример: 1-Семенов/Симферопль 2-Кабанов/Ужгорд 1-Семенов/Симферопль 3-Иванов/Таганрог 4-Сюсюнин/Ялта 1-Семенов/Симферопль 3-Иванов/Таганрог 2-Кабанов/Ужгорд 3-Иванов/Таганрог Но мне необходимо Что бы в DBgride эти данные формировались 2-ве и более записи и каждой записи выводило их колличество повторов Пример: 1-Семенов/Симферопль/3-ЗАПИСИ 3-Иванов/Таганрог/3-ЗАПИСИ 2-Кабанов/Ужгорд/2-ЗАПИСИ Я воспользовался советом расматривавшийся раньше: select f_id, f_name, count(*) cnt from t group by f_id, f_name having count(*)>2 order by f_name но у вы моя соображалка не догоняет как его применить. Я делал так: DM.ADOQuery2.Close; DM.ADOQuery2.SQL.Clear; DM.ADOQuery2.SQL.Add('SELECT ObjList.Number, ObjList.Name, '); DM.ADOQuery2.SQL.Add('ObjList.Addre ss, EvType.Name,EvType.Name,'); DM.ADOQuery2.SQL.Add('EvList.Info, Person.Status,'); DM.ADOQuery2.SQL.Add('Person.FirstN ame,COUNT(*) FROM'); DM.ADOQuery2.SQL.Add('EvList, EvType, ObjList, Person WHERE'); DM.ADOQuery2.SQL.Add('EvList.EvId=E vType.ID AND EvList.ObjId=ObjList.ID AND'); DM.ADOQuery2.SQL.Add('EvList.Operat orID=Person.ID AND EvType.ID=2621,HAVING COUNT(*)>2'); DM.ADOQuery2.Open; Что-то я упускаю или вобще не так делаю, Будте снисходительными помогите направте на верный путь!!! |
07.09.2009, 11:16 | #2 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
пример с табличкой Ассеss сделайте, посмотрим...
Прежде всего, я не знаю, что и откуда Вы копировали. но вот этот запрос вообще НЕ РАБОЧИЙ: Цитата:
то вот этого: 2-Кабанов/Ужгорд/2-ЗАПИСИ Вы вообще не увидите! (2 записи не больше чем 2) и ещё я вижу, что Вы выбираете кучу полей ObjList.Number, ObjList.Name, ObjList.Address, EvType.Name,EvType.Name, EvList.Info, Person.Status, Person.FirstName а повторы (группировку) по всем будете делать? в SQL, если выборка группируется, можно выбирать только те поля, которые указаны в опциях группировки GROUP BY ... и вообще, возьмите Вашу выборку и уже из неё делайте SELECT ... FROM (select_Ваш_старый) GROUP BY ... HAVING COUNT(*)>1 p.s. если не разберётесь, запаковывайте тестовую базу и выкладывайте. разберёмся... |
|
07.09.2009, 13:03 | #3 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
видел вчера тему, но лень было отвечать (все-таки ен уважаете вы участников форума и тегами ен пользуетесь в принципе) и поздно уже
+ еще и свалили в кучу решение из предыдущей своей задачи, в которой стояло условие выбрать все повторы от 3х дублей и более здесь же, как я понимаю, нужно показать просто все дублирующиеся строки с группировкой по куче полей будет выглядеть как-то так Код:
в примере указан список выборки по полям ol.Number, ol.Name, ol.Address если так и нужно, то сократить лишние записи из списка выборки и группировки |
07.09.2009, 13:27 | #4 |
Пользователь
Регистрация: 12.08.2009
Сообщений: 62
|
|
07.09.2009, 13:46 | #5 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
например, 2-Кабанов/Ужгорд а выбираете к этим полям ещё: et.Name, el.Info, p.Status, p.FirstName содержимое этих полей тоже повторяется? (Да/Нет) Если не повторяется - такие строчки считать одинаковыми (и схлопывать, считая при этом количество повторов) или считать их разными? p.s. в примере soleil@mmc это проблема решена так, что содержимое этих полей учитывать,и только если содержимое этих полей тоже повторится, только тогда учитывать повтор. |
||
07.09.2009, 14:26 | #6 | |
Пользователь
Регистрация: 12.08.2009
Сообщений: 62
|
Цитата:
|
|
07.09.2009, 14:29 | #7 |
Пользователь
Регистрация: 12.08.2009
Сообщений: 62
|
Вот сам код который я прописал
DM.ADOQuery2.Close; DM.ADOQuery2.SQL.Clear; DM.ADOQuery2.SQL.Add('SELECT Ob.Number, Ob.Name,'); DM.ADOQuery2.SQL.Add('Ob.Address, Et.Name,Et.Name, '); DM.ADOQuery2.SQL.Add('El.Info, Pr.Status, Pr.FirstName,COUNT(*)cnt FROM '); DM.ADOQuery2.SQL.Add('EvList El, EvType Et, ObjList Ob, Person Pr WHERE'); DM.ADOQuery2.SQL.Add('0=0 AND El.EvId=Et.ID AND El.ObjId=Ob.ID AND'); DM.ADOQuery2.SQL.Add('El.OperatorID =Pr.ID AND Et.ID=2621 group by '); DM.ADOQuery2.SQL.Add('Ob.Number,Ob. Name,Ob.Address,Et.Name,El.Info,Pr. Status,'); DM.ADOQuery2.SQL.Add(' Pr.FirstName HAVING COUNT(*)>1'); DM.ADOQuery2.Open; |
07.09.2009, 15:33 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
пробел потеряли между функцией и именем столбца:
Код:
|
07.09.2009, 15:43 | #9 |
Пользователь
Регистрация: 12.08.2009
Сообщений: 62
|
Я у же испробовал ни чего, все та же ошибка!!!
Когда я убираю все эти функции Запрос работает в старом режиме, выбирает с повторяющиеся строками Последний раз редактировалось Talemir; 07.09.2009 в 15:52. |
07.09.2009, 16:35 | #10 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
попробуй так
Код:
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удаление выделенной строки из DBGrid | Sinker | БД в Delphi | 9 | 20.05.2011 03:09 |
смена цвета строки dbgrid - ? | Evgenii | БД в Delphi | 3 | 04.07.2009 07:57 |
Удалить определенные строки DBGrid | Serval | Помощь студентам | 2 | 08.05.2009 08:20 |
Удаление строки из DBGrid | XATAB | БД в Delphi | 3 | 10.03.2009 08:29 |
DBGrid (Строки и заголовок) | chingiz | Компоненты Delphi | 3 | 06.10.2007 14:49 |