如何使用 SQL 查询将一个月的所有日期名称显示为一列以在报告中显示

How to show all day name of a month as a column using a SQL query to show that in a report

在创建一些报告时,我需要提出一个查询,该查询将月份和年份作为参数并给我一个结果,其中所有日期的名称都作为列。

例如:

我的想法是与我现有的数据集交叉连接并在报告中呈现。同样,如果有任何其他方法可以在 RDL 报告中显示此类数据,那也可以。

您可以使用 cte 递归 制作本月的日历 table。

  • 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() 可以更改为使用您的参数。