Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.11.2012, 16:15
centuriy centuriy вне форума
Прохожий
 
Регистрация: 03.11.2012
Сообщения: 5
Репутация: 10
По умолчанию Несколько строк в одной через запятую

Доброго времени суток.
Delphi, СУБД BDE, Существует данная таблица:
Код:
группа	        имя		    оценки
======================================
5		        дима		3							
5	         	боря		2
5	        	саша		4
9       		никита      3
9	         	лёня		5
9	        	володя      4
9	        	лаврентий	2
1	        	петя		5
1	         	коля		4

задача состоит в том чтобы таблица выглядела в такой форме:
Код:
группа		            имена и оценки
=========================================================
5		                дима (3), боря (2), саша (4)
9		                никита (3), лёня (5), володя (4), лаврентий (2)
1		                петя (5), коля (4)
уважаемые знатоки, вот теперь вопросы:
1) можноли реализовать данную задачку на уровне самого грида,
к примеру с помощью Ehlib dbGrid или Quantum Grid от dev express или есть еще что либо подходящее для этого задания.
2) недавно читал про некие запросы которые существуют именно для этой задачки
только все они для Firebird и других СУБД и моя старая добрая BDE (dBase и Paradoxы),которую начальство нивкакую не хочет менять =((
и всё таки можно это реализовать с помощью запроса или нет?

зы. прогон таблицы по циклу и запись в нее данных програмным путем думаю не вариант тк таблица будет часто обновлятся и грузить саму работу с БД.

Последний раз редактировалось centuriy, 03.11.2012 в 18:15.
Ответить с цитированием
  #2  
Старый 04.11.2012, 02:08
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от centuriy
1) можноли реализовать данную задачку на уровне самого грида,
Конкретно с навороченными гридами не работал, но в общем случае кажется что вряд ли, так как задача в извлечении данных, а не в их показе.

Цитата:
Сообщение от centuriy
2) недавно читал про некие запросы которые существуют именно для этой задачки
Во-первых, есть такая штука, как group by, и она вроде даже работает и в BDE, и вроде даже и для DBF. Поэтому получить предварительную группировку по оценкам можно, и собирать в строку уже придется по результирующему набору данных, число строк в котором будет равно числу учеников.

Во-вторых, чтобы получить это дело одним запросом (что теоретически можно), нужен такой матан, как иерархические запросы (connect by и start with) или хотя бы хотя бы grouping rollup. Можно подыскать СУБД с поддержкой этих операторов. Но это будет только эмуляция, и по-любому придется писать многоступенчатый запрос, типа такого:
Код:
    select
      case
        when prior_pos is null then
          substr(source, 1, pos - 1)
        when prior_pos = 0 then
          substr(source, pos - 1)
        else
          substr(source, prior_pos + 1, pos - prior_pos - 1)
      end token
    from
      select
        source,
        case
          when connect_by_isleaf = 1 then
            instr(source, delimiter, -1)
          when level > 1 then
            instr(source, delimiter, 1, level - 1)
        end prior_pos,
        case
          when connect_by_isleaf = 1 then
            case
              when level > 1 then
                length(source) + 1
              else
                1
            end
          else
            instr(source, delimiter, 1, level)
        end pos
      from
        (trim(both delimiter from source) source from dual)
      connect by
        level < instr(source, delimiter, -1)
      end
    where
      pos > 0
    order by
      1

А агрегация списка в строку встроенной функцией listagg появилась только в Oracle 11g Release 2. Не знаю, насколько она является стандартом на данный момент. До этого наблюдалось, что многие фичи, предложенные и реализованные впервые в Oracle, через какое-то время становились стандартом.

Как говорится, нужно отказаться от BDE и немного подождать.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:47.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter