Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-91729
drunya
2003-07-12 21:47
2003.07.28
Формулы в Word e из Delphi


4-91948
МДа..
2003-05-24 16:21
2003.07.28
Z Order & WS_EX_TOOLWINDOW


3-91627
malamba
2003-07-04 12:14
2003.07.28
Access - запрос на выборку дат - глючит


9-91615
Хранитель_7К
2003-01-23 19:10
2003.07.28
Прозрачная текстура - совсем не прозрачная.


3-91695
Spawn
2003-07-04 08:00
2003.07.28
DataModule





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский