在MS SQL server中创建动态日历

有时候在报表中展示每天的数据需要按整月的方式显示,借用SQL Server的PIVOT可以很容易的实现这个功能。下面这个SQL可以生成每行为一个星期的月历。从【星期日】开始。

Declare 
    @Date datetime,
    @StartDate datetime,
    @EndDate datetime,
    @FirstIndex int

Set @Date =getdate() 

Select 
    @StartDate=Convert(char(6),@Date,112)+'01', 
    @EndDate=Dateadd(month,1,@StartDate)-1,
    @FirstIndex=Datediff(day,6,@StartDate)%7;--第二个参数可以调整每个行的起止星期
With t As
(
    Select Date=Convert(int,1),Row=(@FirstIndex)/7,Col=@FirstIndex
    Union All
    Select Date=Date+1,Row=(@FirstIndex+Date)/7,Col=(Date+@FirstIndex)%7
    From t
    Where Date<=Datediff(day,@StartDate,@EndDate)
)
Select 
    [星期日]=Isnull(Convert(char(2),[0]),''),
    [星期一]=Isnull(Convert(char(2),[1]),''),
    [星期二]=Isnull(Convert(char(2),[2]),''),
    [星期三]=Isnull(Convert(char(2),[3]),''), 
    [星期四]=Isnull(Convert(char(2),[4]),''),
    [星期五]=Isnull(Convert(char(2),[5]),''),
    [星期六]=Isnull(Convert(char(2),[6]),'')
From t
Pivot (Max(Date) For col In([0],[1],[2],[3],[4],[5],[6])) b

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章