Sei in: Home : Competenze : SQL : Microsoft SQL : Query che restituisce un calendario

Query che restituisce un calendario

DECLARE @col AS NVARCHAR(MAX) ='',
@query AS NVARCHAR(MAX);

;WITH Calendar AS(
SELECT dateadd(month,datediff(month,0,getdate()),0) startdate,dateadd(month,datediff(month,0,getdate()),31) enddate
UNION ALL
SELECT startdate + 1 , enddate
FROM Calendar
WHERE startdate + 1 < enddate
), CalendarPivot as (
SELECT datename(weekday,startdate) dayname,
day(startdate) daynum
FROM Calendar
)

--select * from Calendar

--SELECT datename(weekday,startdate) dayname,
-- day(startdate) daynum
--FROM Calendar


SELECT @col = @col + 'MAX(CASE WHEN daynum = '+cast(daynum as varchar(5))+' THEN daynum END) '+ dayname +','
FROM CalendarPivot t1

set @col = substring(@col,0,len(@col))

--SELECT @col

set @query = '
;WITH Calendar AS(
SELECT dateadd(month,datediff(month,0,getdate()),0) startdate,dateadd(month,datediff(month,0,getdate()),31) enddate
UNION ALL
SELECT startdate + 1 , enddate
FROM Calendar
WHERE startdate + 1 < enddate
), CalendarPivot as(
SELECT datename(weekday,startdate) dayname,
day(startdate) daynum
FROM Calendar
)
SELECT ' + @col + '
from CalendarPivot'

execute(@query)