Как получить названия предыдущих месяцев - PullRequest
0 голосов
/ 20 мая 2019

У меня есть этот запрос, который возвращает данные за предыдущие месяцы в виде [Месяц -1].

Select [STORE] = ET_LIBELLE,

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 [Month-1],

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 [Month-2],

.
.
.

FROM PIECE
GROUP BY ET_LIBELLE

Мне нужно получить имя ПРЕДЫДУЩИХ месяцев, внутри [Месяцы -1],..

Например: текущий месяц май:

------------------------------------------
Store -  April - March - February - January
------------------------------------------
S1    -  2620  - 8955 -  6541   - 7410
------------------------------------------
S2    -  3620  - 5455 -  6852   - 4810
------------------------------------------

1 Ответ

3 голосов
/ 20 мая 2019
SELECT DATENAME(MONTH, DATEADD(MM,-1, GETDATE()))

Для создания динамических имен столбцов рассмотрите возможность использования динамических запросов SQL:

DECLARE @sql NVARCHAR(MAX) = 'SELECT 1 AS '+DATENAME(MONTH, DATEADD(MM,-1, GETDATE()))
EXEC sp_executesql @sql

Результат

enter image description here

In your case: 
DECLARE @sql NVARCHAR(MAX) = 'Select [STORE] = ET_LIBELLE,

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())) + ',

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,-2, GETDATE())) + ',

.
.
.

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