Динамические строки и столбцы SQL ... ячейки требуют последующего запроса. Лучший подход? - PullRequest
1 голос
/ 22 апреля 2010

У меня есть следующие таблицы ниже

City
---------
CityID
StateID
Name
Description

Reports
---------
ReportID
HeaderID
FooterID
Description

Я пытаюсь сгенерировать сетку для использования в элементе управления .Net (Gridview, Listview… отдельный вопрос о том, какой из них будет «лучшим» дляиспользовать для моих целей), который назначит отчеты в виде столбцов, а города - в виде строк.

Какие города отображаются в зависимости от выбранного состояния, и это достаточно просто

SELECT * FROM CITIES WHERE STATEID=@StateID

Однако пользователь может выбрать, какие отчеты генерируются для каждого города (Демография, Продажи, Площадь земли и т. Д.).

Далее, результирующие ячейки (Город * Отчет) являются подзапросом к различным таблицам на основе выбранного города и отчета.

Т.е.Выбранный столбец «Продажи» дает

SELECT * FROM SALES WHERE CITYID=@CityID

Я запрограммировал ОЧЕНЬ не элегантное решение, используя несколько запросов и грубое создание сетки (построчно, построчно создание элементов данных), но я 'Я уверен, что должен быть лучший способ сделать это ...?Любые / все предложения, оцениваемые здесь как подход грубой силы, являются медленными и громоздкими ... и клиенту придется часто их использовать, поэтому я не уверен, что это будет приемлемо в его текущей реализации.

1 Ответ

0 голосов
/ 22 апреля 2010

Поскольку у вас были проблемы с городами, в которых не было всех отчетов, вы пробовали Слева Присоединения?Чтобы получить строки вашей сетки, вы можете сделать:

select sales.amt, Demographics.amt, LandArea.amt from cities left join sales on  cities.cityid = sales.cityid 
left join Demographics on  cities.cityid = Demographics.cityid  
left join LandArea on cities.cityid = LandArea.cityid 

Единственный недостаток вышеприведенного запроса - это то, что типы отчетов (Демография, Продажи, Площадь и т. Д.) Жестко закодированы в запросе.Возможно, вы можете смешать приведенный выше запрос с динамическим запросом, который, как вы упомянули, пытались.

Может, показ кода для таблицы поможет вам получить более точные ответы?

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...