как использовать динамический свод для отображения даты в месяце в виде столбцов - месяц явно упоминается - PullRequest
0 голосов
/ 07 сентября 2018
DECLARE @month AS INT = 5
DECLARE @Year AS INT = 2016

;WITH N(N)AS 
(SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1))M(N)),
tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a)
SELECT ROW_NUMBER() OVER(ORDER BY N) AS SLNO ,N day,datefromparts(@year,@month,N) date INTO #CTETEST FROM tally
WHERE N <= day(EOMONTH(datefromparts(@year,@month,1)))

Я хочу сделать день в виде столбцов. Может кто-нибудь дать совет?

1 Ответ

0 голосов
/ 07 сентября 2018

Попробуйте:

DECLARE @DynammicTSQLStatement NVARCHAR(MAX)
       ,@DynamicPIVOTColumns NVARCHAR(MAX);

SET @DynamicPIVOTColumns = STUFF
                          (
                                (
                                SELECT ',[' + CAST([date] AS VARCHAR(12)) + ']'
                                FROM #CTETEST
                                ORDER BY [day]
                                FOR XML PATH('') ,TYPE
                                ).value('.', 'NVARCHAR(MAX)')
                                ,1
                                ,1
                                ,''
                          );

SET @DynammicTSQLStatement = N'
SELECT *
FROM
(
    SELECT [date], SLNO
    FROM #CTETEST
) DS
PIVOT
(
    MAX([SLNO]) FOR [date] IN (' + @DynamicPIVOTColumns + ')
) PVT';

EXEC sp_executesql @DynammicTSQLStatement;

Обратите внимание, я предполагаю, что вы упорядочиваете столбцы, используя столбец day.Его также необходимо исключить из окончательного запроса.

...