Вот как я решил это с помощью SQL. Я создаю динамическую временную таблицу, которая содержит последние 24 месяца, и другую временную таблицу с данными о продажах от 0 до 24 месяцев. Может быть, это поможет кому-то с подобной проблемой. (приведенный ниже код находится на сервере SQL как хранимая процедура). Спасибо за помощь, Марк!
DECLARE @strTemp_months TABLE
(
sorting INT,
months INT,
years INT
)
DECLARE @mnth INT
SET @mnth = 0
WHILE (@mnth < 24)
BEGIN
INSERT @strTemp_months
SELECT CASE WHEN YEAR(GETDATE()) = YEAR(DATEADD( m , -@mnth , GETDATE())) THEN 1 ELSE 2 END AS sorting,
MONTH(DATEADD( m , -@mnth , GETDATE())), YEAR(DATEADD( m , -@mnth , GETDATE()))
SET @mnth = @mnth + 1
END
DECLARE @productID VARCHAR(12)
SET @productID = '1234567890'
DECLARE @strTemp_statistics TABLE
(
sorting INT,
months INT,
years INT,
productno VARCHAR(35),
salesqty DECIMAL(9,2)
)
INSERT @strTemp_statistics
SELECT CASE WHEN YEAR(transaction_date) = YEAR(GETDATE()) THEN 1 ELSE 2 END AS sorting,
MONTH(transaction_date) AS months, YEAR(transaction_date) AS years, product_number AS productno,
SUM(qty) AS salesqty
FROM sales_events
WHERE product_number = @productID
-- including all transactions from last 24 full months until today
AND transaction_date >= CAST(YEAR(DATEADD( m , -23 , GETDATE())) AS CHAR(4)) + '-' + CAST(MONTH(DATEADD( m , -23 , GETDATE())) AS VARCHAR(2)) + '-01'
GROUP BY MONTH(transaction_date), YEAR(transaction_date), product_number
SELECT m.sorting, m.months, m.years, COALESCE(productno, 'No Sales') AS productno, COALESCE(kpl, 0) AS salesqty
FROM @strTemp_months m LEFT OUTER JOIN @strTemp_statistics s
ON m.months = s.months AND m.years = s.years
ORDER BY 1, 2 DESC