Как выбрать столбец с максимальным значением в T-SQL? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь найти месяц с наибольшим количеством продаж, я смог отобразить каждый месяц с его продажами, используя:

SELECT Month(orderdate)  AS Month, 
       Year(orderdate)   AS Year, 
       Sum(salesorderid) AS Sales 
FROM   sales.salesorderheader 
GROUP  BY Month(orderdate), 
          Year(orderdate) 

, который показывает

This Result

Но я просто хочу выбрать лучший месяц продаж.

Ответы [ 4 ]

1 голос
/ 06 ноября 2019

Просто используйте top (1):

SELECT TOP (1) Month(orderdate)  AS Month, 
       Year(orderdate)   AS Year, 
       Sum(salesorderid) AS Sales 
FROM sales.salesorderheader 
GROUP BY Month(orderdate), Year(orderdate) 
ORDER BY Sales DESC;
1 голос
/ 06 ноября 2019

Вы должны group сначала year, затем month. Затем используйте count(), а не sum() (кажется, ваш столбец - SalesOrderID), но если вы пытаетесь получить sum of sales, это должно быть что-то вроде sum(salesamount). Также поменяйте column aliases, это sql keywords.

select month(OrderDate) as oMonth, year(OrderDate) as oYear
    , count(1) as SalesCount
from SalesOrderHeader
group by year(OrderDate), month(OrderDate)

, получив most number of sales.

select top 1 * from (
    select month(OrderDate) as oMonth, year(OrderDate) as oYear
        , count(1) as SalesCount
    from SalesOrderHeader
    group by year(OrderDate), month(OrderDate)) t1
order by t1.SalesCount desc
0 голосов
/ 06 ноября 2019

Вы можете попробовать

  1. Используя ORDER BY " имя поля " DESC
  2. Если поле " salesorderid " нев номере типа функция ORDER BY не может быть запущена. Так что вы можете изменить раньше, используйте CAST("field name" AS Decimal)

Проверьте ниже фрагмент кода

SELECT Month(a.orderdate)  AS Month, 
       Year(a.orderdate)   AS Year, 
       Sum(a.salesorderid) AS Sales                                               
FROM   sales.salesorderheader  a
GROUP BY Month(a.orderdate),Year(a.orderdate) 
ORDER BY CAST(a.Sum(a.salesorderid), AS Decimal) DESC
0 голосов
/ 06 ноября 2019

Если я прав, вы хотите напечатать один результат с максимальными продажами. И здесь "salesorderid" - это общий объем продаж за месяц

  • Попробуйте добавить MAX
SELECT Month(orderdate)  AS Month, 
       Year(orderdate)   AS Year, 
       MAX(Sum(salesorderid)) AS Sales 
FROM   sales.salesorderheader 
GROUP  BY Month(orderdate), 
          Year(orderdate) 
  • Или попробуйте использовать предложение HAVING
SELECT Month(orderdate)  AS Month, 
       Year(orderdate)   AS Year, 
       Sum(salesorderid) AS Sales 
FROM   sales.salesorderheader 
GROUP  BY Month(orderdate), 
          Year(orderdate) 
HAVING MAX(Sum(salesorderid))

, поскольку Sum (salesorderid) - это общий объем продаж, который может сработать ...

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