Примечание: Вы всегда должны использовать правильный тип данных для столбца. Это позволит избежать множества проблем. Всегда храните значения даты в типе данных date
.
Я бы посоветовал вам сначала преобразовать тип данных INT
в дату, а затем использовать функции DATE
для вычисления названия квартала. Он будет точным.
Ниже я добавляю 01
в качестве даты к yyyymm
, а затем делаю его как yyyymmdd
, чтобы получить формат даты ISO 8601 (который составляет c форматов даты), а затем вычисляет значение четверти.
declare @table table(sales_date int, product_name varchar(30),seller varchar(30), price int)
insert into @table
VALUES(202001,'Product X', 'Agent1',2320),(202001,'Product X', 'Agent2',1416),
(202004,'Product X', 'Agent1',420)
SELECT seller, product_name,
CONCAT('Q',DATENAME(QUARTER,CONCAT(CAST(sales_date AS VARCHAR(10)),'01'))) as Quarter,
sum(price) as total_sales
from @table
group by seller, product_name,
CONCAT('Q',DATENAME(QUARTER,CONCAT(CAST(sales_date AS VARCHAR(10)),'01')))
+--------+--------------+---------+-------------+
| seller | product_name | Quarter | total_sales |
+--------+--------------+---------+-------------+
| Agent1 | Product X | Q1 | 2320 |
| Agent1 | Product X | Q2 | 420 |
| Agent2 | Product X | Q1 | 1416 |
+--------+--------------+---------+-------------+