假设以下内容 - 我正在记录(在单个表中)在许多业务流程的完整日期中经过的持续时间。 持续时间可以是1天至50天。 假设有20种不同的流程类型被监控,并且在每种流程类型中,单个流程实例的持续时间可以在最小和最大持续时间范围(1 - 50)之间。
例如 -
表1第1列将列出过程1的记录持续时间值(示例值 - 23,5,17,41,...)。
表1第2列将列出过程2的记录持续时间值。
表1第3列将列出过程3的记录持续时间值... 等等。
必填 -
我想获取这些数据,并在第二个表中,针对每个流程类型计算特定持续时间发生的次数。
例如 -
表2第1列将列出(按升序排列)可能的持续时间值(1到50)。
后续的表2列将表示(对于第1列中的每个值)每个流程类型(每个流程类型一列)的每个流程的频率计数。
因此,例如,在流程1中,35天的持续时间可能会发生46次,而在流程2中,可能会发生23次。
希望这是有道理的!
这在SQL Server中是否可行?如果是这样,我该如何实现? 优选地,这应该采取尽可能少的步骤,尽可能少的用户交互 - 如果可以的话! 此外,如果将来我需要监控更多流程,会发生什么?
答案 0 :(得分:1)
如果您不介意每当流程类型的数量发生变化时都必须手动更改查询,那么应该这样做(给出了4种流程类型的示例):
;With Sequence([Days]) as
(
Select 1 as [Days]
union all
Select [Days] + 1
from Sequence
where [Days] < 50
)
select
S.[Days]
,Count(case when P.[P1]=S.[Days] then 1 end) AS [P1Count]
,Count(case when P.[P2]=S.[Days] then 1 end) AS [P2Count]
,Count(case when P.[P3]=S.[Days] then 1 end) AS [P3Count]
,Count(case when P.[P4]=S.[Days] then 1 end) AS [P4Count]
from Sequence S, ProcessDuration P
group by S.[Days]
顶部的Sequence
cte生成数字1到50.然后输出使用带有Count
语句的case
来计算每种流程类型与天数的匹配。输出是左侧为1-50
的网格,以及连续列中每种过程类型的计数。
您需要修改表/列名称以与您的特定架构相关。