Выберите топ n из разных категорий - PullRequest
0 голосов
/ 04 декабря 2018

Итак, я хочу выбрать 10 самых продаваемых продуктов за квартал в год.Четверть четверти года.пример:

год-> 2017 1-й квартал: топ-10 проданных продуктов

я хотел бы получить такой вид продукции: (где key-> ProductKey, ProductVolume-> Количество продаж этого продукта,Квартал-> Номер рассматриваемого квартала, Год-> Год в вопросе.

| Key | ProductVolume | Квартал | Год | ....... ....

2ndквартал: топ-10 проданных продуктов ... год-> 1-й квартал: топ-10 проданных продуктов 2-й квартал: топ-10 проданных продуктов

SELECT s.ProductKey as [Key],
    COUNT(s.ProductKey) as [ProductVolume],
    datepart(q, s.OrderDate) as [Quarter],(yyyy, s.OrderDate) as [Year]
FROM (Select p.ProductKey,
             s.OrderDate,
             row_number() over(PARTITION BY datepart(q, s.OrderDate)
                order by 
                p.ProductKey desc) as rn
      FROM Sales as s 
      INNER JOIN SalesProduct as sp
          ON sp.SalesKey=s.SalesKey
      INNER JOIN Product as p
          ON p.ProductKey=sp.ProductKey
      ) as s
WHERE datepart(yyyy, s.OrderDate) 
    BETWEEN YEAR(getdate())-2 AND YEAR(getdate())
GROUP BY datepart(q, s.OrderDate), datepart(yyyy, s.OrderDate), s.ProductKey

это результат, который я получаю прямо сейчас, все результаты...

enter image description here

введите описание изображения здесь

Изображение выше представляет результат этого запроса,это расположение таблиц, которые я использую во внутренних соединениях.

Select top 1 * from Product;
  Select top 1 * from Sales;
  Select top 1 * from SalesProduct;

1 Ответ

0 голосов
/ 04 декабря 2018

Упорядочено по продажной стоимости за продукт за квартал + год.

DECLARE @Sales TABLE (
    SalesKey INT,
    OrderDate DATETIME
)

DECLARE @SalesProduct TABLE (
    SalesKey INT,
    ProductKey INT,
    UnitPrice MONEY,
    OrderQuantity TINYINT
)

INSERT INTO @Sales(SalesKey,OrderDate) SELECT 1, '2018-05-18'
INSERT INTO @Sales(SalesKey,OrderDate) SELECT 2, '2018-05-18'

INSERT INTO @SalesProduct(SalesKey,ProductKey,UnitPrice,OrderQuantity) SELECT 1,123,3.50,1
INSERT INTO @SalesProduct(SalesKey,ProductKey,UnitPrice,OrderQuantity) SELECT 1,125,3.50,1
INSERT INTO @SalesProduct(SalesKey,ProductKey,UnitPrice,OrderQuantity) SELECT 2,123,2.50,5

SELECT *
FROM (
    Select
        datepart(year, s.OrderDate) AS [Year],
        datepart(q, s.OrderDate) AS [Quarter],
        sp.ProductKey,
        sum(sp.OrderQuantity) AS [TotalOrdered],
        sum(sp.UnitPrice * sp.OrderQuantity) AS [TotalValue],
        row_number() over(PARTITION BY datepart(year, s.OrderDate),datepart(q, s.OrderDate) order by sum(sp.OrderQuantity) desc) as [Row]
    FROM @Sales as s 
    INNER JOIN @SalesProduct as sp ON sp.SalesKey=s.SalesKey
    WHERE datepart(yyyy, s.OrderDate) BETWEEN YEAR(getdate())-2 AND YEAR(getdate())
    GROUP BY datepart(year, s.OrderDate),datepart(q, s.OrderDate),sp.ProductKey
) dat
WHERE dat.[Row]<=10
...