1

次のことを想定してください - 多数のビジネス プロセスの経過日数を (1 つのテーブルに) 記録しています。期間は 1 日から 50 日の範囲です。監視されている 20 の異なるプロセス タイプがあり、各プロセス タイプ内で、個々のプロセス インスタンスの期間が最小期間と最大期間の範囲 (1 ~ 50) の間であるとします。

例えば ​​-

表 1 の列 1 には、プロセス 1 の記録された期間の値がリストされます (値の例 - 23、5、17、41、...)。

表 1 列 2 には、プロセス 2 の記録された期間の値がリストされます。

表 1 列 3 には、プロセス 3 の記録された期間の値がリストされます... など。

必須 -

このデータを取得し、2 番目のテーブルで、プロセスの種類ごとに、特定の期間が発生した回数をカウントします。

例えば ​​-

表 2 列 1 には、可能な期間値 (1 から 50) が (昇順で) リストされます。

後続の表 2 の列は、(列 1 のこれらの値のそれぞれについて) 各プロセス タイプで発生した頻度のカウントを表します (プロセス タイプごとに 1 つの列)。

したがって、たとえば、プロセス 1 では 35 日間の期間が 46 回発生する可能性がありますが、プロセス 2 では 23 回発生する可能性があります。

これが理にかなっていることを願っています!

これはSQL Serverでも可能ですか?もしそうなら、どうすればこれを達成できますか? できれば、ユーザーの操作をできるだけ少なくして、できるだけ少ない手順で実行する必要があります。また、将来、さらに多くのプロセスを監視する必要がある場合はどうなりますか?

4

1 に答える 1

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]

上部のSequencecte は、1 から 50 までの数字を生成します。次に、出力Countで withcaseステートメントを使用して、各プロセス タイプの一致を日数にカウントします。1-50出力は左側にあるグリッドで、連続する列に各プロセス タイプのカウントが表示されます。

特定のスキーマに関連するように、テーブル/列の名前を変更する必要があります。

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

于 2013-10-31T12:31:41.670 に答える