Функция NTILE() в SQL Server

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Это моя таблица.

 CREATE TABLE [dbo].[Ventes](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Région] [nvarchar](20) NULL,
[pays] [nvarchar](20) NULL,
[CAMensuel] [int] NOT NULL
) ON [PRIMARY]
GO
 

Я хочу создать запрос, который возвращает сумму CAMensuel. Но я также использую функцию NTILE().

Я попытался выполнить этот запрос query

 select*, sum(CAMENSUEL) , NTILE(2)  over(partition by Région order by sum (Région) ) as [ntil] from ventes 
 

Но это возвращает эту ошибку :
Столбец ‘продажи.Идентификатор’ недопустим в списке выбора, поскольку он не содержится в агрегатной функции или в предложении GROUP BY .

Как я могу это сделать, пожалуйста?

Спасибо

Комментарии:

1. Примеры данных и ожидаемые результаты помогут нам помочь вам. Однако ошибка сообщает вам о проблеме, но я подозреваю, что a GROUP BY само по себе — это не то, что вам нужно; поскольку у вас есть a SELECT * и, следовательно, группировка по каждому столбцу была бы бессмысленной. Возможно, ваш SUM также должен быть оконным?


Ответ №1:

Этот запрос является запросом агрегирования:

 select v.*,
      sum(CAMENSUEL) ,
       NTILE(2) over (partition by Région order by sum(Région) ) as [ntil]
from ventes v;
 

Она содержит несколько ошибок. Во-первых, использование select * в запросе агрегации обычно является ошибкой. Во-вторых, нет GROUP BY . В-третьих, предположительно, region это не то, что можно было бы агрегировать.

Я бы предположил, что вы намереваетесь сделать что-то вроде этого:

 select v.region,
       sum(CAMENSUEL) ,
       NTILE(2) over (order by sum(CAMENSUEL)) as tile
from ventes v
group by region;
 

Это агрегирует по регионам и добавляет tile значение, равное 1 или 2, в зависимости от суммы CAMENSUEL .

Ответ №2:

Обновление, я нашел решение

 select région, Pays ,  sum (CAMENSUEL) over (Partition by Région order by id ) as [SUM_CA_MENSUEL], ntile (2) over(order by id) as NTIL
 

от ventes

Комментарии:

1. Это связано с тем, что по какой-либо причине NTILE недоступна как агрегатная функция, только как оконная функция. Так SUM что потребности также должны быть