Данные за последние 24 месяца - PullRequest
0 голосов
/ 21 мая 2019

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

DECLARE @sql NVARCHAR(MAX) = 'SELECT [STORE] = ET_LIBELLE,

CONVERT(DECIMAL(15,0),SUM(CASE WHEN YEAR(GP_DATEPIECE) = YEAR(DATEADD(MONTH,-1,GETDATE()))
AND  month(GP_DATEPIECE) =  MONTH( DATEADD(MONTH,-1,GETDATE()))
THEN ISNULL([SALES], 0) ELSE 0 END)) AS ' + DATENAME(MONTH, DATEADD(MM,-1, GETDATE())) + ',

CONVERT(DECIMAL(15,0),SUM(CASE WHEN YEAR(GP_DATEPIECE) = YEAR(DATEADD(MONTH,-2,GETDATE()))
AND  month(GP_DATEPIECE) =  MONTH( DATEADD(MONTH,-2,GETDATE()))
THEN ISNULL([SALES], 0) ELSE 0 END)) AS ' + DATENAME(MONTH, DATEADD(MM,-2, GETDATE())) + ',
.
.
.
FROM PIECE
GROUP BY ET_LIBELLE'
EXEC sp_executesql @sql

РЕЗУЛЬТАТЫ:

STORE   -   April   -   March   -   February   -   ..
--------------------------------------------------------
S1      -   5500    -   6530    -    4550      -   ..
S2      -   2400    -   8740    -    9650      -   ..
..
--------------------------------------------------------

Есть ли какое-нибудь решение для оптимизации и ускорения запроса, пожалуйста?

1 Ответ

0 голосов
/ 21 мая 2019

Этот следующий скрипт вернет данные за 12 месяцев (от JAN до DEC), но за 1 строку в год. Если это приемлемо, вы можете использовать этот запрос. Вы также можете установить номер месяца (@HowManyMonth = N), для которого за сколько месяцев вы хотите выбрать данные.

DECLARE @HowManyMonth INT
SET @HowManyMonth = 24
DECLARE @StartDate DATE
SET @StartDate = CAST(DATEADD(DD,-(DAY(DATEADD(MM,-(@HowManyMonth-1),GETDATE()))-1),DATEADD(MM,-(@HowManyMonth-1),GETDATE())) AS DATE)

SELECT * FROM
(
    SELECT Store,Sales,
    YEAR(GP_DATEPIECE) YR,
    CASE  MONTH(GP_DATEPIECE)
        WHEN 1 THEN 'JAN' WHEN 2 THEN 'FEB' WHEN 3 THEN 'MAR' WHEN 4 THEN 'APR' WHEN 5 THEN 'MAY' WHEN 6 THEN 'JUN'
        WHEN 7 THEN 'JUL'   WHEN 8 THEN 'AUG' WHEN 9 THEN 'SEP' WHEN 10 THEN 'OCT' WHEN 11 THEN 'NOV' WHEN 12 THEN 'DEC'
    END MONTH
    FROM PIECE
    WHERE GP_DATEPIECE >= @StartDate
)AS P
PIVOT
(
    SUM(Sales) 
    FOR MONTH IN ([JAN],[FEB],[MAR],[APR],[MAY],[JUN],[JUL],[AUG],[SEP],[OCT],[NOV],[DEC])
) PVT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...