sql - 针对每个未透视的列显示日期?
问题描述
我编写了这个查询来将列转换为行。
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
解决方案
推荐阅读
- c# - 使用 Linq 在 List 中查找模式出现计数
- java - 可以重置参数化SQL吗?
- android - 如何解决 Nullpointerexception 错误?
- javascript - 使用 ImageOverlay 为图像着色的传单
- javascript - 当我尝试在反应中打印时,为什么没有显示道具
- c - 移位计数大于类型宽度
- javascript - 如何在 vuejs 中组件的每次渲染上正确调用异步方法?
- mysql - 如何使用 MariaSQL Node JS 模块执行最后一个查询?
- mysql - MySQL - 按计数分组
- javascript - 在循环中迭代和渲染 SVG