![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объеденить несколько строк из таблицы в отдну строку. [D7, Access]
Draught © (2007-10-01 17:11:00)День добрый.
Есть 2 таблицы table1 и table2
table1
ID - autoincrement
Unit - Text
...
Notes - Text
table2
ID - autoincrement
Table1ID - Integer
Name - Text
Count - Integer
свяpm вроде очевидна
table1.ID 1--M table2.Table1ID
Теперь задача:
Нужно наваять запрос, в котором для каждой записи из table1 будет соответствовать единственная запись (строка), содержащая в себе все поля из первой таблицы и соответствующие записи второй таблицы.
Пример:
table1
ID | Unit | ... | Notes
1 | First | | бла-бла
2 | Sec | | бла-бла-бла
table2
ID | Table1.ID | Name | Counter
1 | 1 | FF | 5
2 | 1 | HH | 6
3 | 2 | FF | 4
4 | 1 | AN | 8
5 | 1 | CK | 3
результат:
ID | Unit | ... | Notes | N1 | C1 | N2 | C2 | N3 | C3 | N4 | C4 |
1 | First | | бла-бла | FF | 5 | HH | 6 | AN | 8 | CK | 3 |
...
Выбрать все строки подряд по очереди не сложно, просто меняем номер строки и количество строк, переменные так же не сложно подобрать, но вот как сделать это все в одном запросе? например хотя бы на 4 строки, как в примере выше?
Ну и выбор нужной строки примерно так выглядит
SELECT name as Name:From, Count as Count:From FROM table2
LIMIT :From,1
sniknik (2007-10-02 11:22:00) [1]> правильнее (удобнее) использолвать переменные
с этим никто не спорит, но всетаки правильнее использовать параметры правильно, а не так, что ни движок тебя не поймет, ни ИИ, ни даже твои коллеги по ремеслу. (с чего и было предположение сначала, что движок какойто экзотический... но раз это не так то...)
> Тогда попрошу уточнить чего именно.
SELECT name as Name:From, Count as Count:From FROM table2
LIMIT :From,1
то что этот запрос не выполнится изза "непонимаемости" движком это не доказательство бредовости?
хочеш уточнений? тогда попробуй его выполнить и читай ошибки которые тебе будет выдавать вместо отработки.
Draught (2007-10-02 10:44:00) [2]2sniknik ©
Синтаксис запросов соблюдается, правильнее (удобнее) использолвать переменные (:FROM) при построении запроса, нежели (+INTTOSTR(FROM)) на то параметры и существуют, к тому же эти параметры конвертируются до этапа передачи запроса СУБД, так что для СУБД разницы тоже нет никакой. Или я может чего-то не понимаю? Тогда попрошу уточнить чего именно.
На счет бреда попрошу уточнить, ибо я считаю это просто банальным невежеством и неуважением к себе.
Я ошибся при указании типов данных, используемых в таблице, по большому счету разницы нет никакой INTEGER=NUMBER а AutoIncrement=AutoNumber.
sniknik (2007-10-01 22:22:00) [3]> я же все-таки в Delphi пишу, а не в самой MSAccess
но ты же пользуешься его движком, а тут уж "плевать в чем писать, а синтаксис запросов соблюдать обязан"
> а это просто SQL запрос в ADOQuery с использованием параметров.
тем более, с учетом сказанного для аксесса запрос - бред, и вдвойне бред изза того как используются параметры, раз это не мудренный синтаксис неизвестной субд.
Draught (2007-10-01 18:43:00) [4]2b z
Нет, не ошибся, поросто писал быстро, ну и ошибся, естественно Autonumber, Number.
А что касается последнего абзаца - я же все-таки в Delphi пишу, а не в самой MSAccess, а это просто SQL запрос в ADOQuery с использованием параметров.
b z (2007-10-01 18:33:00) [5]
> хелп аксесса
смущает только autoincrement, Integer да и последний абзац топика, не ошибся ли автор при указании субд ...
Вася Правильный (2007-10-01 18:25:00) [6]
> sniknik © (01.10.07 18:15) [6]
мдя, не знал
sniknik (2007-10-01 18:15:00) [7]> отстается придумать опцию И.Т.Д., чтоб движок сам догадался, сколько колонок взять и по каким правилам
хелп аксесса
Инструкция TRANSFORM
Создает перекрестный запрос.
Синтаксис
TRANSFORM статФункция
инструкцияSelect
PIVOT поле [IN (значение_1[, значение_2[, ...]])]
Ниже перечислены аргументы инструкции TRANSFORM:
...
Draught (2007-10-01 18:09:00) [8]2Jeer ©
Очень интересное решение, что-нибудь теперь точно придумаем.
2Вася Правильный
Движку будет передаваться SQL запрос, составленый исходя из количества строк :)
Думаю, что дальше я уже соображу как это организовать. Спасиб за помощь :)
Вася Правильный (2007-10-01 17:50:00) [9]Jeer © (01.10.07 17:47) [3]
отстается придумать опцию И.Т.Д., чтоб движок сам догадался, сколько колонок взять и по каким правилам
Jeer (2007-10-01 17:47:00) [10]SELECT
(case when YEARS_ID = 2004 then YEARS_VAL else '0' end) as Y2004,
(case when YEARS_ID = 2005 then YEARS_VAL else '0' end) as Y2005,
(case when YEARS_ID = 2006 then YEARS_VAL else '0' end) as Y2006,
(case when YEARS_ID = 2007 then YEARS_VAL else '0' end) as Y2007
FROM YEARS;
Вася Правильный (2007-10-01 17:44:00) [11]запрос с неизвестным заранее числом колонок невозможен
Johnmen (2007-10-01 17:42:00) [12]Копай в сторону кросс-таблиц и кросс-отчетов (cross).