|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как заменить связь Master-detail?
День добрый
firebird 2.0 +delphi7 имеется 3 таблицы: RESEARCH // таблица с названиями исследований RESEARCH_UID //ключ RESEARCH_NAME//название MAIN // таблица основных данных по образцу M_UID//ключ, остальные строки не существенны RESEARCH_TABLE//таблица соответствий исследований образцу из MAIN, т.к. не известно сколько будет исследований для образца связываем через неё RT_UID// ключ R1//внешний ключ на RESEARCH_UID RES_EXT//внешний ключ на M_UID Сейчас с использованием Master-detail для текущей выбранной записи отображаются исследования в отдельной таблице. Пользователи говорят что это не наглядно, хотят видеть в общей таблице (select * from MAIN) еще и данные по исследованиям. Т.е. нужно, в идеале, добавить столбец где через запятую перечислены все исследования по образцу. Менее желательный вариант добавить 5 столбцов в которых соответственно первые 5 исследований Подскажите как правильно реализовать. Последний раз редактировалось goshaRU, 30.07.2012 в 18:51. |
#2
|
||||
|
||||
Код:
SELECT <нужные столбцы> FROM main m, research r, research_table rt WHERE rt._res_ext = m.m_uid AND rt.r1 = r.research_uid Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#3
|
|||
|
|||
Yurk@
вы в точности привели мой запрос для detail грида видимо я непонятно сформулировал задачу. попробую ещё раз, с примером. Имеется 2 dbgrid. в первом содержание MAIN, например 4 столбца: m_uid=1,номер_в_журнале=100,культура=кукуруза,вес= 100т. во втором гриде, связанные с выбранной в первом гриде строкой исследования. Например имея 3 исследования по данному образцу получаем RT_UID=1, RESEARCH_NAME=масличность, RES_EXT=:M_UID=1 RT_UID=2, RESEARCH_NAME=всхожесть, RES_EXT=:M_UID=1 RT_UID=3, RESEARCH_NAME=безопасность, RES_EXT=:M_UID=1 из всего этого нужно получить один грид который содержит 1 строку, в ней 4 столбца из первого грида + 1 столбец с тремя исследованиями через запятую/пробел (либо +3 столбца по одному исследованию в каждом): m_uid=1,номер_в_журнале=100,культура=кукуруза,вес= 100т, исследования=масличность, всхожесть,безопасность либо m_uid=1,номер_в_журнале=100,культура=кукуруза,вес= 100т, исследование1=масличность, исследование2=всхожесть,исследование3=безопасность Последний раз редактировалось goshaRU, 30.07.2012 в 18:50. |
#4
|
||||
|
||||
а какая БД для этого применяется? Access ?
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#5
|
||||
|
||||
и, я так понимаю, кол-во исследований для каждой культуры может варьироваться? так?
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#6
|
|||
|
|||
firebird 2.0
да, варьируется. можно принять для простоты что в итоговой таблице не будем больше 5ти исследований отображать |
#7
|
||||
|
||||
тогда так:
Код:
SELECT stolb1, stolb2, stolb3, LIST(research_name, ';') FROM (select m.stolb1, m.stolb2, m.stolb3, r.research_name from main m, research r, research_table rt where rt._res_ext = m.m_uid and rt.r1 = r.research_uid) GROUP BY <столбик(и) по которому будет делаться групировка> Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#8
|
|||
|
|||
обновился до 2.1
Код:
SELECT M_UID, num_p, NUM_ACT, LIST(research_name, ';') FROM (select m.M_UID, m.num_p, m.NUM_ACT, r.research_name from main m, research r, research_table rt where rt.res_ext = m.m_uid and rt.r1 = r.research_uid) GROUP BY num_p Invalid token. Dynamic SQL Error. SQL error code = -104. Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause). upd. еще веселее вот на такую простенькую Код:
select list (research_name, ',') from research_table, research where ( (res_ext = 748) and (r1 = research_uid) ) Последний раз редактировалось goshaRU, 30.07.2012 в 20:47. |