Вы можете использовать cte recursion создать таблицу календаря на этот месяц.
datename
получить имя столбца. day
получить день месяцачисло.
затем подключено условие агрегатная функция Строка SQL для сводки.
final, динамический SQL выполняет SQL динамически.
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 @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))
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)
sqlfiddle
ПРИМЕЧАНИЕ
getdate()
можно изменить для использования вашего параметра.