Как объединить результат от вызова базы данных? - PullRequest
0 голосов
/ 08 февраля 2009

У меня в веб-отчете необходимо вернуть несколько товаров из разных регионов. Упрощенный запрос будет выглядеть так:

Select ProductName, ProductPrice 
from Product
where Region in (Region1, Region2, Region 3)

Регионы выбираются пользователями из пользовательского интерфейса. Результат привязан к сетке данных. Это может быть несколько регионов. Но результат будет выглядеть как

        ProductName,  ProductPrice [Region 1] ProductPrice [Region 2] ...
Prod1
Prod2
....

Продукты не такие, как в том же регионе. Некоторые могут быть нулевыми в некоторых регионах. Для динамического связывания с сеткой я использую DataTable, а затем динамически добавляю столбец данных для полей региона. Самый простой подход - зациклить результат, запрашиваемый каждым регионом, а затем объединить с помощью Product (1, 2, 3 ...). Он работает, но медленно, особенно для строк больше 2К. Мне интересно, сможем ли мы избежать вложенных циклов.

Ответы [ 3 ]

1 голос
/ 08 февраля 2009

Вы используете SQL Server? Если это так, вы можете использовать оператор PIVOT для поворота региона.

0 голосов
/ 08 февраля 2009

Извините, первый ответ ниже был неудачным. Если я правильно понимаю, вы можете заполнить DataRows в заказе продукта, зациклив набор результатов:

Select ProductName, ProductPrice, Region 
from Product
where Region in (Region1, Region2, Region 3)
ORDER BY ProductID, Region

Новый DataRow создается для каждого нового productID, и у каждого региона есть DataColumn со значением ProductPrice (или ничего).


В этом вопросе отсутствуют важные детали, но в целом я предлагаю разрешить СУБД обрабатывать агрегации (если вы используете базу данных?). Двухмерные агрегаты должны быть быстрыми.

  1. В группе запросов SQL по регионам и по продуктам используйте статистическую функцию для расчета вашей суммы (например, денег, количества). Вы должны получить набор результатов (продукт, группа, количество), где сумма - это требуемый агрегат, или NULL
  2. В ASP.NET переберите набор результатов и создайте таблицу данных
  3. Привязать данные к элементу управления сеткой

Даже если этот подход не подходит, попробуйте свести к минимуму количество запросов из вашего источника данных. Количество запросов никогда не должно зависеть от столбца сетки / количества строк.

0 голосов
/ 08 февраля 2009

Я думаю, что нам может понадобиться немного больше информации о запросах и цикле, который вы используете, но можете ли вы использовать AJAX? Похоже, вы хотите, чтобы пользовательский интерфейс был более приятным и мог получать информацию для регионов «по запросу»

...