如何仅使用SQL按单个列统计列中的值实例?

如何仅使用SQL按单个列统计列中的值实例?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,假设如下- 我在一个表中记录了许多业务流程在完整天数内经过的持续时间。 持续时间从1天到50天不等。 假设有二十种不同的流程类型被监控,并且在每种流程类型中,单个流程实例的持续时间可以介于最小持续时间和最大持续时间范围1-50之间 例如— 表1第1列将列出过程1示例值的记录持续时间值-23,5,17,41 表1第2列列出了流程2记录的持续时间值 表1第3列将列出过程3的记录持续时间值。。。 等等 必需的- 我想获取这些数据,并在第二个表中,为每个进程类型计算特定持续时间发生的次数 比如说- 表2

假设如下- 我在一个表中记录了许多业务流程在完整天数内经过的持续时间。 持续时间从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种流程类型的示例:

;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]
顶部的序列cte生成数字1到50。然后,输出使用Count和case语句将每个流程类型的匹配项计数到天数。输出是一个网格,左侧为1-50,每个进程类型的计数在连续列中

您需要修改与特定架构相关的表/列名


演示:

如果您不介意在流程类型的数量发生变化时手动更改查询,这应该可以做到这一点,下面给出了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]
顶部的序列cte生成数字1到50。然后,输出使用Count和case语句将每个流程类型的匹配项计数到天数。输出是一个网格,左侧为1-50,每个进程类型的计数在连续列中

您需要修改与特定架构相关的表/列名


演示:

感谢大家的快速响应!Mellamokb-完全按照需要工作。感谢各位快速响应!Mellamokb-完全按照需要工作。谢谢!并为迟迟的反应道歉…谢谢!并为迟迟的反应道歉。。。。