0

1 時間ごとに SUMmations が必要な場合に完全に機能する SQL ステートメントがあります (SQL Server 2008)。はDATEPART(HOUR, DATE_TIME)私のためにすべての素晴らしい仕事をしています。

SELECT  SUM(case STATION_ID when 'S-WELDCHK' then 1 else 0 end) as WELDCHK
       ,SUM(case STATION_ID when 'S-GLUING-OUT-OK' then 1 else 0 end) as GLUING
       ,SUM(case STATION_ID when 'S-GLUING-OUT-NOK' then 1 else 0 end) as 'GLUING-NOK'
       ,SUM(case STATION_ID when 'S-ULTRAWELD-OUT-OK' then 1 else 0 end) as ULTRAWELD
       ,SUM(case STATION_ID when 'S-ULTRAWELD-OUT-NOK' then 1 else 0 end) as 'ULTRAWELD-NOK'
       ,SUM(case STATION_ID when 'S-BOLTFAST-OUT-OK' then 1 else 0 end) as BOLTFAST
       ,SUM(case STATION_ID when 'S-BOLTFAST-OUT-NOK' then 1 else 0 end) as 'BOLTFAST-NOK'
       ,SUM(case STATION_ID when 'S-MAPVISION-OUT-OK' then 1 else 0 end) as MAPVISION
       ,SUM(case STATION_ID when 'S-MAPVISION-OUT-NOK' then 1 else 0 end) as 'MAPVISION-NOK'
       ,SUM(case STATION_ID when 'S-CHECKFIX-OUT-OK' then 1 else 0 end) as CHECKFIX
       ,SUM(case STATION_ID when 'S-CHECKFIX-OUT-NOK' then 1 else 0 end) as 'CHECKFIX-NOK'
       ,SUM(case STATION_ID when 'S-EJOT-OUT-OK' then 1 else 0 end) as EJOT
       ,SUM(case STATION_ID when 'S-EJOT-OUT-NOK' then 1 else 0 end) as 'EJOT-NOK'
  FROM [dbFactory].[dbo].[Events]
  where (DATEPART(yy,DATE_TIME) = 2014
         AND DATEPART(mm,DATE_TIME) = 2
         AND DATEPART(dd,DATE_TIME)= 5)
  GROUP BY 
        DATEPART(HOUR, DATE_TIME)
 with rollup

私が実際に欲しいのは、一時テーブルにある不規則な期間のSUMSです(簡潔にするために切り捨てられています)

Start         Finish
06:00:00.000  06:30:00.000
06:30:00.000  07:30:00.000
07:30:00.000  08:30:00.000
08:30:00.000  09:30:00.000
09:30:00.000  10:00:00.000
10:00:00.000  10:30:00.000
10:30:00.000  11:30:00.000
11:30:00.000  12:30:00.000
12:30:00.000  13:30:00.000
13:30:00.000  14:00:00.000

ウェブサイトに関する提案、またはこれを解決するために何を読むべきか。DATE_TIMEおそらくトランザクションの START および FINISH 期間と を渡すことができるユーザー定義関数をロールアップする機能があるはずです。

4

2 に答える 2

1

を使用して、クエリを Periods テーブルに結合します。between

     inner join Periods on events.DATE_TIME between Periods.Start and Periods.End

期間テーブルのフィールドでグループ化

     group by Periods.Start

注意。期間が 2 つの期間のちょうど境界にある場合にどうなるかを決定する必要があります。期間を調整するか、> と <= を使用して結合する必要がある場合があります

コンストラクトPIVOTを使用するのではなく、参照することもできます。SUM(CASE...

于 2014-02-25T09:25:05.460 に答える