2012-01-17 3 views
0

Я пытаюсь запросить мою базу данных, чтобы узнать, какие продукты продаются меньше в октябре, чем в ноябре или декабре.SQL - сравнение и группировка данных по нескольким строкам

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

Должен быть какой-то способ сделать это с помощью GROUP BY, но я не могу понять это.

SELECT Category, Product 
    FROM Sales 
WHERE SaleQuantity < (SELECT MIN(SaleQuantity) 
         FROM Sales 
         WHERE MonthNumber > 10) 
    AND MonthNumber = 10 

данных выглядит следующим образом:

Category Product  MonthNumber SaleQuantity 
---------- ----------- ------------- ----------- 
11   14   10   210 
11   14   11   200 
11   14   12   390 
15   12   10   55 
15   12   11   24 
17   12   12   129 
19   10   10   12 

Спасибо. не

+0

Является ли это SQL Server? Вы рассматривали CTE с продуктом, месяцем и минусом (продажи), а затем присоединились к этому? –

+0

Я просто подумал, что может быть простой способ получить эти данные с помощью стандартного SQL – BrightonDev

+0

Все дело в вкусе, но мой опыт с запросом, который вы задаете в своем вопросе, заключается в том, что вы получаете простую, чистую реализацию, если используете КТР. –

ответ

0


попробовать что-то вроде этого

SELECT Category, 
     Product, 
     SUM(s.SaleQuantity) AS saleOcotber, 
     SUM(ISNULL(son.SaleQuantity, 0)) AS saleNovember, 
     SUM(ISNULL(sod.SaleQuantity, 0)) AS saleDecember 
FROM Sales s 
    LEFT OUTER JOIN Sales son ON son.Category = s.Category 
    AND son.Product = s.Product 
    AND son.MonthNumber = 11 
    LEFT OUTER JOIN Sales sod ON sod.Category = s.Category 
    AND sod.Product = s.Product 
    AND sod.MonthNumber = 11 
WHERE s.MonthNumber = 10 
GROUP BY Category,Product 
WHERE SUM(s.SaleQuantity) < SUM(ISNULL(son.SaleQuantity, 0)) 
    OR SUM(s.SaleQuantity) < SUM(ISNULL(sod.SaleQuantity, 0)) 

Я не проверял это выбор, но я думаю, что он будет делать работу, если есть что-то не ясно, пожалуйста спросите

С наилучшими пожеланиями, Йордан

PS. Я предполагаю, что вы используете какую-то версию MSSQL, если не пытаетесь переписать ее самостоятельно. SQL-код используется вами.

0

Ваша таблица уже представлена ​​в разделе Category, Product и MonthNumber для SalesQuantity. Если да, попробуйте следующее:

select distinct Category, Product 
from Sales s11_12 
where MonthNumber in (11,12) and 
     not exists (select null 
        from Sales s10 
        where s10.Category = s11_12.Category and 
         s10.Product = s11_12.Product and 
         s10.SalesQuantity >= s11_12.SalesQuantity) 
Смежные вопросы