首页 > 解决方案 > 针对每个未透视的列显示日期?

问题描述

我编写了这个查询来将列转换为行。

select [ProjectName], EachDay, Hours
from [dbo].[TimeSheet_Child] 
unpivot
(
  Hours
  for EachDay in ([Mon], [Tue], [Wed])
) u

但我需要的日期不是每天,而是在一周的开始和结束之间,例如

目前:

ProjectName  EachDay     Hours
A            Mon          2
B            Tue          8
C            Wed          1

应该

ProjectName   EachDay       Hours
A            15Dec2019        2
B            16Dec2019        8
C            17Dec2019        1

为了在一周的开始和结束之间选择日期,我写了这个。

Declare @Year   int
,@Week int
,@YearText varchar(4)

set @Year = 2019
set @Week = 51

set @YearText = @Year

Declare @Increment int
Set @Increment= 1

declare @date datetime
Set @date= dateadd(day
             ,@Increment - datepart(dw, @YearText + '-01-01')
                + (@Week-1) * 7
             ,@YearText + '-01-01')
print @date

While (@Increment < 8)
Begin
              print dateadd(day
             ,@Increment - datepart(dw, @YearText + '-01-01')
                + (@Week-1) * 7
             ,@YearText + '-01-01')

              Set @Increment= @Increment + 1
End

标签: sqlsql-servertsqlsql-server-2012

解决方案


推荐阅读