Привет!
Нужно реализовать следующую структуру Базы Данных.
Есть таблица с товарами (№ товара, название товара). Нужно обеспечить возможность сохранение в базе данные за отчетные периоды. Данные вида (пришло товаров, располагаемое количество). Сделать нужно так чтобы в результате SQL запроса можно было получить таблицу вида.
№|Название товара|Пришло (кол.) за 1 от. период|Располагаемое количество за 1 от.|Пришло (кол.) за 2 от. период|Располагаемое количество за 2 от.| ...
Здравствуйте, sunshine, Вы писали:
S>Дык это не структурой базы решается, а динамически генерируемым запросом.
Не обязательно.
Если таблицу такого вида нужно получить на выходе из отчётной системы, то она должна уметь строить перекрёстные таблицы. Пожалуй, большинство коммерческих продуктов это умеют.
Если результат запроса обрабатывается в самописном коде, то можно имитировать работу перекрёстного отчёта. Для этого нужно:
1) добавить в запрос ограничение по времени от начала первого до конца последнего отчётного периода;
2) добавить в список выражений группировки и сортировки конструкцию, которая бы отделяла друг от друга записи для разных отчётных периодов;
3) при обработке результата считать все строки, отличающиеся только номером периода, принадлежащими одной строке результата.
Динамический SQL нужен только если данные из базы сразу пишутся в файл какой-нибудь стандартной утилитой, типа SQL*Plus для Oracle.
Здравствуйте, Лобанов Игорь, Вы писали:
ЛИ>1) добавить в запрос ограничение по времени от начала первого до конца последнего отчётного периода; ЛИ>2) добавить в список выражений группировки и сортировки конструкцию, которая бы отделяла друг от друга записи для разных отчётных периодов; ЛИ>3) при обработке результата считать все строки, отличающиеся только номером периода, принадлежащими одной строке результата.
Ну так ведь это и есть динамический запрос. Разве все действия, перечисленные в этих пунктах, можно выполнить статическим запросом с параметрами?
В любом случае, количество колонок в выходных данных заранее неизвестно, поэтому как ни крути, а придется строить запрос в зависимости от данных таблицы.
Здравствуйте, sunshine, Вы писали:
S>Здравствуйте, Лобанов Игорь, Вы писали:
ЛИ>>1) добавить в запрос ограничение по времени от начала первого до конца последнего отчётного периода; ЛИ>>2) добавить в список выражений группировки и сортировки конструкцию, которая бы отделяла друг от друга записи для разных отчётных периодов; ЛИ>>3) при обработке результата считать все строки, отличающиеся только номером периода, принадлежащими одной строке результата.
S>Ну так ведь это и есть динамический запрос. Разве все действия, перечисленные в этих пунктах, можно выполнить статическим запросом с параметрами?
пп.1, 2 — можно и нужно.
п.3 предполагает транспонирование результата кодом
S>В любом случае, количество колонок в выходных данных заранее неизвестно, поэтому как ни крути, а придется строить запрос в зависимости от данных таблицы.
Вам доступно объяснили, каким образом избежать использования дин. SQL.
Предложенная практика распространена.