【发布时间】:2011-05-13 17:41:36
【问题描述】:
我正在尝试找到一种更好的方法来制作水晶报表(其他人的)... 将不重叠的时间按组加起来。 这显然是一个古老的问题...... 有没有获取技巧
- 调整(开始/结束)时间,每条记录,以消除常见/重叠时间,
- 在子组内
- --使用直接 SQL(虽然我发现我可以做 CTE)
假设 Start Time(和/或 Group、SubGroup)的初始 order-by 以及 Start 和 End 是单独的字段。
一种图形示例:
Group 1
SubGroup A
Tkt 1 |--start&end---| "16"
Tkt 2 |----tart&end----| "18"
Tkt 3 |--art&end---| "14"
Tkt 4 |--S & E -| "11"
SubGroup B
Tkt 5 |-S&E-| "7"
Tkt 6 |-S&E-| "7"
Tkt 7 |-S&E-| "7"
...
(equiv adjusted start/end w/in sub-group):
Group 1
SubGroup A ( w/ "elapsed time" of "33" )
Tkt 1 |--start&end---| <- Regular "16"
Tkt 2 |-----| <- Adjusted "start" "6"
Tkt 3 | <- Adjusted "start" & "end" "0"
Tkt 4 |--S & E -| <- Regular "11"
SubGroup B ( w/ "elapsed time" of "17" )
Tkt 5 |-S&E-| <- Regular "7"
Tkt 6 |-S&E-| <- Regular (no overlap) "7"
Tkt 7 |-| <- Adjusted "Start" "3"
...
我现在不是在谈论求和,只是说明根据之前的记录调整开始/结束。
在报告中,他们针对每条记录执行多个公式,针对在组中的第一条记录上设置的两个变量,然后根据当前记录设置/更新 AdjustedStart、AdjustedEnd 的值,并将 AdjustedStart、AdjustedEnd 传递给另一个计算时间差的公式,稍后求和。目前的技术很慢,我无法做一个漂亮的交叉表。
我在想/希望这已经在 SQL-only 中得到解决,因为我们不能在数据库服务器上放置任何 proc、临时表等。我试图找出一种使用 CTE 和(重新)诅咒的方法,使用 Group/SubGroup 作为父级,并使用 CASE 来比较当前值与最后一个父级值。这是否敲响了警钟或听起来合理?
Crystal 的能力很多,但这似乎并不适合它。
马克
【问题讨论】:
标签: sql tuples common-table-expression overlap