Как отобразить название дня за месяц в виде столбца, используя SQL-запрос, чтобы показать это в отчете - PullRequest
0 голосов
/ 22 сентября 2018

При создании отчета мне нужно составить запрос, который принимает в качестве параметра месяц и год и дает результат, в котором все названия дней представлены в виде столбцов.

Например:

enter image description here

Идея заключается в перекрестном соединении с моим существующим набором данных и представлении этого в отчете.Опять же, если есть какой-либо другой способ показать данные такого рода в отчете RDL, это также подойдет.

1 Ответ

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

Вы можете использовать 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() можно изменить для использования вашего параметра.

...