Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.28;
Скачать: CL | DM;

Вниз

... Запрос, как много в этом звуке ...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.013 c
14-91909
Дмитрий Терёхин
2003-07-12 10:47
2003.07.28
нужно сделать программу


1-91741
Igit
2003-07-13 12:34
2003.07.28
Извлечение ресурсов.


4-91950
PashaIv
2003-05-25 22:16
2003.07.28
---|Ветка была без названия|---


14-91887
Dmitriy O.
2003-07-10 07:59
2003.07.28
Хотел бы проконсультироваться


1-91755
Yuraz
2003-07-15 14:08
2003.07.28
Как повернуть фигуру (пересчитать неск. вершин) на опр. угол?