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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2010, 08:06   #1
AK BULLETS
Пользователь
 
Регистрация: 18.03.2010
Сообщений: 88
Вопрос Сцепить в одно поле

Добрый день!

Подскажите как в SQL запросе собрать данные при группировке в одно поле. К примеру, есть таблица с двумя полями FIO и DATE. Группируя по FIO нужно чтобы даты сцепились в одно поле по каждому FIO.

Вообще мне нужно следующее:
К примеру Петров приходил на работу 01.01.2010, 04.01.2010 и 10.01.2010, мне нужно сгруппировать по FIO и чтобы даты сцепились в одну ячейку, то еть при группировке у Петрова в ячейке DATE мне нужно чтобы было "01.01.2010 04.01.2010 10.01.2010", а ещё лучше "01.01.2010 и 04.01.2010 и 10.01.2010".

Запрос в delphi, база данных access.

Последний раз редактировалось AK BULLETS; 14.07.2010 в 08:15.
AK BULLETS вне форума Ответить с цитированием
Старый 14.07.2010, 09:22   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если я правильно понял, то подобные задачи решаются
либо использованием кода на сервере (хранимые процедуры/функции)
либо прямо на клиенте.

Общий принцип одинаков - запрос получаем с нужным порядком записей (order by), потом в цикле идём по записям, и, пока выполняется условие, собираем их в одну строчку. Если условие изменилось - сохраняем строчку в таблицу (или, в случае функций БД - возвращаем результат).

p.s. побольше конкретики - структура таблиц, цель сбора, пример кода с запросом на Delphi...
вот тогда, может быть, Вы получите конкретный код решения.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.07.2010, 09:43   #3
AK BULLETS
Пользователь
 
Регистрация: 18.03.2010
Сообщений: 88
По умолчанию

Конекретнее.
Есть таблица "PRIHOD" с полями FIO и DATE, со значенифями:
Петров | 01.01.2010
Петров | 04.01.2010
Петров | 10.01.2010
Иванов | 03.01.2010
Иванов | 15.01.2010

Запрос:

select FIO, last(DATE) as DATE from PRIHOD GROUP BY FIO

Но в этом случае я получу последнее значение из DATE:
Петров | 10.01.2010
Иванов | 15.01.2010

А как получить объекдинение значений в DATE при группировке по FIO:
Петров | 01.01.2010 04.01.2010 10.01.2010
Иванов | 03.01.2010 15.01.2010

Вот в общем то вопрос.
AK BULLETS вне форума Ответить с цитированием
Старый 14.07.2010, 09:52   #4
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

сервер БД какой?
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 14.07.2010, 09:55   #5
AK BULLETS
Пользователь
 
Регистрация: 18.03.2010
Сообщений: 88
По умолчанию

База данных ACCESS
AK BULLETS вне форума Ответить с цитированием
Старый 14.07.2010, 09:58   #6
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Цитата:
Сообщение от AK BULLETS Посмотреть сообщение
База данных ACCESS
IMHO только программно, предлагаю отображать в виде 2х таблиц
в одном список фамилий
в другом даты
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 16.07.2010, 10:53   #7
Kemperok
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 25
По умолчанию

Если это касается вывода данных одной строкой а не по каждому сотруднику в таблице, то можно было бы сделать:
из запроса типа
Select FIO, DATE from Table
where FIO = :ID
И по нажтии на кнопу выводить в поля данные...
var i as integer;
begin
SQL.open;
SQL.first;
DBEdit1.value:=SQL.FIO.value;
for i:=1 to SQL.recordcount.value do begin
DBEdit2.value:=DBEdit2.value+', '+DateToString(SQL.DATE.value);
SQL.next;
end;
Kemperok вне форума Ответить с цитированием
Старый 16.07.2010, 11:07   #8
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
Сообщение

Цитата:
Сообщение от Kemperok Посмотреть сообщение
Если это касается вывода данных одной строкой а не по каждому сотруднику в таблице, то можно было бы сделать:
из запроса типа
Select FIO, DATE from Table
where FIO = :ID
И по нажтии на кнопу выводить в поля данные...
var i as integer;
begin
SQL.open;
SQL.first;
DBEdit1.value:=SQL.FIO.value;
for i:=1 to SQL.recordcount.value do begin
DBEdit2.value:=DBEdit2.value+', '+DateToString(SQL.DATE.value);
SQL.next;
end;
тогда уж связать две таблицы через DataSource
и поставить данный код в компонент (Master)DataSource, в событие OnDataChange

Код:
var i as integer;
begin
Query1.DisableControls();
while not Query1.Eof do
begin
Edit1.Text:=Edit1.Text+', '+Query1.FieldByName('DATE').AsString;
SQL.next;
end;
Query1.EnableControls();
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в QRepopt отображать одно и тоже поле в нескольких колонках? Milishka БД в Delphi 2 19.04.2010 14:37
Сцепить и убрать повторы Иванов_ДМ Microsoft Office Excel 6 17.09.2009 14:03
Данные из двух полей исх. таблицы в одно поле сводной таблицы Strelec79 Microsoft Office Excel 2 02.08.2009 13:59
После ввода в поле по Enter нужно перейти на другое поле! •ScReam•™ Помощь студентам 2 16.06.2009 08:47
Одно поле StringField в DataView в Rave. Как добавить еще? Leser Помощь студентам 1 06.10.2008 15:00