【发布时间】:2018-10-31 10:13:02
【问题描述】:
我有两张这样的表
_____________________
| UserID | UserName | --TableName = User
________________________________________________
| UserID | DateLoggedInOn | MinutesLoggedInFor | ---TableName = SessionInfo
这是一份报告,我应该允许用户选择一个没有限制的日期范围(跨越多少周)
目前,报告通过指定起始日期来工作,然后报告只会获取从起始日期开始一周的数据。
所以我有一个这样的查询
Declare @Day1 datetime = @FromDateTime,
@Day2 datetime = DATEADD(DAY,1,@FromDateTime),
@Day3 datetime = DATEADD(DAY,2,@FromDateTime),
@Day4 Datetime = DATEADD(DAY,3,@FromDateTime),
@Day5 datetime = DATEADD(DAY,4,@FromDateTime),
@Day6 datetime = DATEADD(DAY,5,@FromDateTime),
@Day7 datetime = DATEADD(DAY,6,@FromDateTime)
SELECT UserID, username, (select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day1 and si.dateloggedinon <= @Day1 and si.UserID = u.userid) as Day1,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day2 and si.dateloggedinon <= @Day2 and si.UserID = u.userid) as Day2,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day3 and si.dateloggedinon <= @Day3 and si.UserID = u.userid) as Day3,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day4 and si.dateloggedinon <= @Day4 and si.UserID = u.userid) as Day4,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day5 and si.dateloggedinon <= @Day5 and si.UserID = u.userid) as Day5,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day6 and si.dateloggedinon <= @Day6 and si.UserID = u.userid) as Day6,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day7 and si.dateloggedinon <= @Day7 and si.UserID = u.userid) as Day7 from User u
这已经很复杂了,感觉不对,但它确实有效,并为我提供了所需的数据。 不过,我不知道如何在多周内获取信息。 这样它就会返回这样的东西
_________________________________________________________
| UserName | UserID | ReportingWeek | Day1 | Day 2 | ……..
| testuser | 5 | 5/13/18 – 5/19/18 | 120 | 240 | …….
| testuser | 5 | 5/20/18 – 5/ 26/18 | 60 | 200 | …….
Reportingweek 将是一周的跨度,例如,如果用户设置 @FromDateTime = 5/13/18
@ToDateTime = 5/26/18 报告将持续两周,Day1, Day2, Day3 .... 中的数据仅适用于“ReportingWeek”
我曾考虑过使用 while 循环,但听说这不是最佳做法。
【问题讨论】:
-
什么决定了
ReportingWeek? -
@TabAlleman 查看编辑
-
所以报告周不是基于一周中的某一天?无论@FromDateTime 是什么,无论是星期几?
-
来吧 - 格式
-
你真的应该在这里使用连接而不是子查询。为了提供足够的帮助,尽管我们需要一些更清晰的信息。这是一个很好的起点。 spaghettidba.com/2015/04/24/…
标签: sql sql-server tsql reporting-services