2013-02-27 5 views
0

Я создал запрос для получения самых продаваемых продуктов. Теперь я хочу запросить этот результат, например, верхних порядка 100 продуктов по SerialNo или верхних порядка 100 продуктов по SellingQty ... и т.д ..Как запросить результат запроса?

Вот мой запрос, который даст все продукты заказ от totalOrders:

SELECT tblProducts.skuCode,tblProducts.productCode, tblProducts.productName, COUNT(tblOrders_Products.delivered) as totalOrder 
    FROM tblOrders_Products INNER JOIN tblProducts ON tblOrders_Products.productID = tblProducts.productID 
    WHERE tblProducts.productName is not null 
    GROUP BY tblOrders_Products.delivered, tblOrders_Products.productID, tblProducts.skuCode,  tblProducts.productName,tblProducts.productCode 
    ORDER BY totalOrder 

Я считал, что нужно создать представление. Но многие сообщения говорят, что, используя предложение Order By с представлением, is harmful или не дать результат sometime, Итак, мне интересно, как это можно сделать?

Я могу сделать это в .NET путем сортировки DataTable и использования этого как DataSource. Но как это можно сделать в SQL SERVER?

И какой путь быстрее? Заказ на SQL Server или DataTable? Я использую SQL SERVER 2005.

Спасибо.

+0

Добавить опцию TOP в выбранном элементе, например, 'SELECT TOP 100 SELECT tblProducts.skuCode, tblProducts.productCode, tblProducts.productName, .....' –

+0

Группировка по полному заказу позволит вам проверить TOP (X) или TOP (X) процентов от вашего запроса –

+0

Вы хотите заказать по номеру SerialNo или заказать по SellingQty ПОСЛЕ вашего заказа По totalOrder? Или вы просто хотите переключить параметр Order By? –

ответ

1

Это должно дать вам Top 100 продуктов, заказанных SerialNo (я предположил, что это часть tblProducts здесь).

Вы можете переключить параметр Order By, чтобы упорядочить его по другим полям.

SELECT a.skuCode, a.productCode, a.productName, a.totalOrder, a.SerialNo 
FROM 
(
SELECT TOP 100 tblProducts.skuCode,tblProducts.productCode, tblProducts.productName, COUNT(tblOrders_Products.delivered) as totalOrder, tblProducts.SerialNo 
    FROM tblOrders_Products INNER JOIN tblProducts ON tblOrders_Products.productID = tblProducts.productID 
    WHERE tblProducts.productName is not null 
    GROUP BY tblOrders_Products.delivered, tblOrders_Products.productID, tblProducts.skuCode,  tblProducts.productName,tblProducts.productCode 
    ORDER BY totalOrder) a 
ORDER BY a.SerialNo 
1

Что-то вроде этого следует сделать это:

WITH TopProducts AS 
(
    SELECT TOP 100 tblProducts.productID, COUNT(tblOrders_Products.delivered) as totalOrder 
    FROM tblOrders_Products INNER JOIN tblProducts ON tblOrders_Products.productID = tblProducts.productID 
    WHERE tblProducts.productName is not null 
    GROUP BY tblProducts.productID 
    ORDER BY COUNT(tblOrders_Products.delivered) DESC 
) 
SELECT * 
FROM TopProducts INNER JOIN tblProducts ON TopProducts.productID = tblProducts.productID 
ORDER BY tblProducts.SerialNo 

В TopProducts называется общим выражением таблицы в SQL Server, и это отличный способ для повторного использования части запроса.

Сортировка DataTable в .NET также будет. Вы, вероятно, не заметите разницы в производительности всего за 100 строк. Сортировка на клиенте фактически предпочтительнее в сценарии, когда пользователь может захотеть сортировать результаты по-разному, например. щелкнув заголовки столбцов в сетке, так как это может быть выполнено без отдельного вызова базы данных.

+0

Цените свой ответ и познакомите меня с новой концепцией. Я пробовал, но получаю Parse Error для запроса рядом с «AS». Я проверил некоторые ссылки и попытался поместить имена столбцов рядом с AS, но все равно получаю такую ​​же ошибку. –

Смежные вопросы