Форум: "Потрепаться";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
Вниз... Запрос, как много в этом звуке ... Найти похожие ветки
← →
AlexGreG (2003-07-11 08:22) [0]Всем привет!
? Как получить набор данных содержащий данные из двух таблиц:
из первой - все поля, плюс ...
из второй - ... все строки, связанные с записью первой таблицы (количество строк неодинаковое)
Заранее всем благодарен.
Результат должен быть такой:
о--------о поле1, поле2, поле3, Еполе, Еполе, Еполе
| таб1 | ------------------------------------------
---------- знач знач знач зн1 зн3
| поле1 | знач знач знач зн2
| поле2 | знач знач знач зн4
| поле3 | ------------------------------------------
| ключ |
o--------o
| связь 1:М по полю "ключ"
A
о--------о Число колонок "Еполе" зависит от числа
| таб2 | привязанных записей
----------
| Еполе |
| ключ |
o--------o
← →
ЮЮ (2003-07-11 09:09) [1]А почему для первой строки заполняются 1 и 3, а для других - 2 столбец в Еполе ?
← →
AlexGreG (2003-07-11 09:45) [2]Дело в том, что с одной записью из таб1 связано несколько записей из таб2, число которых разное для разных записей из таб1.
Необходимо, чтобы значения из таб2, привязанные к записи из таб1 отображались вместе с этой записью как одна строка в гриде
← →
ЮЮ (2003-07-11 09:50) [3]Но почему так
о--------о поле1, поле2, поле3, Еполе, Еполе, Еполе
| таб1 | ------------------------------------------
---------- знач знач знач зн1 зн3
| поле1 | знач знач знач зн2 /
| поле2 | знач знач знач зн4
| поле3 | ------------------------------------------
а не просто
о--------о поле1, поле2, поле3, Еполе, Еполе, Еполе
| таб1 | ------------------------------------------
---------- знач знач знач зн1 зн2
| поле1 | знач знач знач зн1
| поле2 | знач знач знач зн1
| поле3 | ------------------------------------------
Какая БД?
← →
ЮЮ (2003-07-11 09:51) [4]Но почему так
о--------о поле1, поле2, поле3, Еполе, Еполе, Еполе
| таб1 | ------------------------------------------
---------- знач знач знач зн1 зн3
| поле1 | знач знач знач зн2
| поле2 | знач знач знач зн4
| поле3 | ------------------------------------------
а не просто
о--------о поле1, поле2, поле3, Еполе, Еполе, Еполе
| таб1 | ------------------------------------------
---------- знач знач знач зн1 зн2
| поле1 | знач знач знач зн1
| поле2 | знач знач знач зн1
| поле3 | ------------------------------------------
Какая БД?
← →
AlexGreG (2003-07-11 09:53) [5]ORACLE
← →
AlexGreG (2003-07-11 09:56) [6]... потому что с первой строкой из "таб1" связаны две строки из "таб2", значения в которых = "зн1","зн3" (в каждой строке по значению)
а со второй строкой из "таб1" связана одна строка из "таб2" и имеет значение "зн2"
← →
DenK_vrtz (2003-07-11 09:56) [7]ЮЮ © (11.07.03 09:51), не знаю так ли понимаю, но сдается мне, что он хочет каждую строчку второй таблицы столбцом сделать.
Только возможно ли это?!
← →
AlexGreG (2003-07-11 10:00) [8]DenK_vrtz ©
Именно так!
← →
AlexGreG (2003-07-11 10:01) [9]Известно точно, что из второй таблицы будет выбираться одно поле
← →
Theoden (2003-07-11 10:02) [10]Если тебе для вывода проще сделать так что на каждую запись в первом гриде будут показываться все связанные записи во втором гриде
← →
DenK_vrtz (2003-07-11 10:05) [11]"Я все понял! Это были неправильные пчелы! И они готовят направильный мед" :-)
А если серьезно, то AlexGreG © (11.07.03 09:56) не мучайся лучше, а свяжи табл1 и табл2 по ключевому полю и получишь
поле1, поле2, поле3, Еполе
--------------------------
знач знач знач зн1
знач знач знач зн3
знач знач знач зн2
---------------------------
При всем многообразии выбора, по-моему, другой альтернативы нет!
← →
AlexGreG (2003-07-11 10:06) [12]Theoden, об этом способе каждому программеру известно.
В том-то и дело, что нужно в одном гриде отображать...
а потом ещё и изменять значения. ;o)
← →
DenK_vrtz (2003-07-11 10:11) [13]AlexGreG © (11.07.03 10:06), а что мешает написать запрос (а лучше вью и триггер к нему) через union all, например, и отображать все в одном гриде?
← →
AlexGreG (2003-07-11 10:11) [14]DenK_vrtz © ,дело в том, что это перекрёстный отчет (если эту таблицу можно так назвать). И важным условием является то, что число колонок Еполе должно быть равно максимальному числу (по строкам из первой таблицы) привязанных записей из второй таблицы
;o)
← →
Johnmen (2003-07-11 10:17) [15]Понятно, что никаким, сколько угодно сложным запросом, это не реализуемо. Но существует несколько вариантов решения вопроса, зависящих от разных факторов, в т.ч. и от типа СУБД.
← →
DenK_vrtz (2003-07-11 10:23) [16]AlexGreG © (11.07.03 10:11), одним запросом вряд ли это получится. Может есть спецы.
Что скажет, ЮЮ ©?
Есть штука в Oracle, аналог делфового куба, крутая - но тормозная :-) (название на помню), так вот в ней можно это сделать.
Я, если надо так извратится, использую временные таблицы.
← →
Жук (2003-07-11 10:29) [17]
> DenK_vrtz © (11.07.03 10:23)
> Я, если надо так извратится, использую временные таблицы.
Если уж извращаться, то можно и двумерный массив использовать.
← →
DenK_vrtz (2003-07-11 10:30) [18]Жук © (11.07.03 10:29), мона, кому что нравится :-)
А кто-то карандашом на бумаге рисует и проблем не знает :-)
← →
AlexGreG (2003-07-11 10:31) [19]DenK_vrtz © ,
а есть ли возможность в гриде (привязанном к набору данных) использовать колонки, в ячейки которых значения вписать можно: что-то вроде виртуальных колонок?
← →
DenK_vrtz (2003-07-11 10:39) [20]AlexGreG © (11.07.03 10:31), вчера проскакивал такой вопрос, кто-то там всовывал данные в грид без источника данных, посмотри.
А почему бы тогда StringGrid не использовать?
А может другие компоненты есть?
← →
Ega23 (2003-07-11 10:49) [21]В свое время я сталкивался с аналогичной проблемой. Я просто создавал кучу временных таблиц, а потом объединял их через join. Работало достаточно быстро.
← →
AlexGreG (2003-07-11 11:02) [22]Ega23 ,
БД временные таблицы и оттуда выборка клиенту?
← →
stud (2003-07-11 11:08) [23]если такая форма представления данных нужна только для просмотра то наверное лучше действительно использовать stringgrid.
а обыными запросами такое не сделаеш.
у меня была обратная задача - столбцы отображать в строках, тут или хитрую хранимую процедуру писать надо или проще стринггрид использовать.
← →
ЮЮ (2003-07-11 11:17) [24]>DenK_vrtz © (11.07.03 10:23)
>Что скажет, ЮЮ ©?
:-) ЮЮ, к счастью, DBGrid-ы не юзает. Он создал Grid на базе TDrawGrid, в котором можно корректировать/удалять/добавлять записи из скольки угодно связанных таблиц и теперь не имеет проблем с "хитрым" отображением информации в DBGrid-ах.
Чего и автору вопроса советует, т.к. корректировка поля в гриде может приводить к любой из трех команд (корректировать/удалять/добавлять), а потому никакой DBGrid c этим не справится, даже если удастся построить НД нужного вида
← →
AlexGreG (2003-07-11 11:17) [25]Всем огромное спасибо. Пойду переделаю с использованием виртуальной таблицы.
... А так не хотелось ...
← →
sniknik (2003-07-11 11:25) [26]Johnmen © (11.07.03 10:17)
> Понятно, что никаким, сколько угодно сложным запросом, это не реализуемо.
в Access есть подобное (более менее, как я это понял),
Инструкция TRANSFORM
Создает перекрестный запрос.
Синтаксис
TRANSFORM статФункция
инструкцияSelect
PIVOT поле [IN (значение_1[, значение_2[, ...]])]
может и в других базах есть.
а в 1С это вроде шахматкой называют.
AlexGreG © (11.07.03 10:31)
посмотри примеры по ClientDataSet1 в хелпе там как раз такое делается (отвязанный набор от бд), как раз подойдет. наделаеш столбцов сколько хочеш ... правда все ручками.
но круче стринггрида получится (функционал базы работать привычнее), кстати а stringgrid тоже ручками обрабатываь так что...
← →
Johnmen (2003-07-11 11:38) [27]>sniknik © (11.07.03 11:25)
>в Access есть подобное ...
Я имел в виду в рамках стандарта SQL. И не даром намекнул на тип СУБД...
:)))
← →
sniknik (2003-07-11 11:49) [28]Johnmen © (11.07.03 11:38)
я и не сомневался, что имелся смысл и именно такого плана, и писал не тебе а как бы в продолжение на цитату. (пусть знает какую базу надо было выбирать ;о))))
← →
DenK_vrtz (2003-07-11 11:51) [29]Да, господа, при желании можно сделать все! :-)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.008 c