1

假设以下 - 我正在(在一个表中)记录多个业务流程的完整天数经过的持续时间。持续时间可以从 1 天到 50 天不等。假设有二十种不同的流程类型被监控,并且在每种流程类型中,单个流程实例的持续时间可以在最小和最大持续时间范围(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 中是否可行,如果可以,我该如何实现?最好,这应该采取尽可能少的步骤,尽可能少地与用户进行交互——如果可以的话!另外,如果将来我必须监控更多进程,会发生什么?

4

1 回答 1

1

If you don't mind having to manually change the query whenever the number of process types changes, this should do it (example given for 4 process types):

;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]

The Sequence cte at the top generates the numbers 1 to 50. Then the output uses Count with a case statement to count matches for each process type to the number of days. The output is a grid with 1-50 along the left side, and the count for each process type in the successive columns.

You'll need to modify the table/column names to be relevant for your particular schema.

Demo: http://www.sqlfiddle.com/#!3/b51da/5

于 2013-10-31T12:31:41.670 回答