1

Visual Studio SSRS 2008 を使用して、計算されたデータを SQL データベースから取得しようとしています。select/from/where ステートメントで条件を使用しようとすると問題が発生します。私がやろうとしていることの一例は、15 分ごとに採取されたサンプルから 24 時間 (昨日の午前 10:00 から今日の午前 10:00 まで) の失敗の総数を見つけることです。バルブが開いているときにガスがバルブを通過するガスプラントについて報告しています。特定の開いたバルブを通過するガスは、燃焼室で点火されます。この時、バルブが開いていて燃焼室内の温度が1400度以下だと故障です。現在、バルブの状態と燃焼室の温度に関するデータを 15 分ごとに提供するクエリがあります。先ほど言ったように、バルブが開いているステータス 2 のときだけ気にします。同時に燃焼室の温度は 1400 度未満です。現在のクエリと結果データのサンプルを以下にコピーしました。ご覧のとおり、現在のクエリには必要な条件が含まれていません。次のようなコードを追加する必要があります。

COUNT (IF RTO_FCV601_SSTS=2 AND RTO_COMB1TEMP < 1400)

SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = DateAdd(HOUR,-24,GetDate())
SET @EndDate = GetDate()
SET NOCOUNT OFF
SELECT temp.TagName ,DateTime,Value
From (
SELECT  * 
 FROM History
 WHERE History.TagName IN ('RTO_FCV601_STS','RTO_COMB1TEMP')
 AND wwRetrievalMode = 'Cyclic'
 AND wwCycleCount = 96
 AND wwVersion = 'Latest'
 AND DateTime >= @StartDate
 AND DateTime <= @EndDate) temp
 WHERE temp.StartDateTime >= @StartDate

Resulting data:
TagName         DateTime                    Value
RTO_FCV601_STS  2013-04-08 15:44:40.6600000 2
RTO_COMB1TEMP   2013-04-08 15:44:40.6600000 1663
RTO_FCV601_STS  2013-04-08 15:59:50.1340000 2
RTO_COMB1TEMP   2013-04-08 15:59:50.1340000 1604
RTO_FCV601_STS  2013-04-08 16:14:59.6080000 2
RTO_COMB1TEMP   2013-04-08 16:14:59.6080000 1557
RTO_FCV601_STS  2013-04-08 16:30:09.0810000 0
RTO_COMB1TEMP   2013-04-08 16:30:09.0810000 1704
RTO_FCV601_STS  2013-04-08 16:45:18.5550000 2
RTO_COMB1TEMP   2013-04-08 16:45:18.5550000 1576
RTO_FCV601_STS  2013-04-08 17:00:28.0290000 2
RTO_COMB1TEMP   2013-04-08 17:00:28.0290000 1645

SQL 内でこの問題を解決できない場合は、Visual Studio SSRS 内で方法を見つけられることを願っています。助けてくれてありがとう!

4

1 に答える 1

0

私の考えでは、あなたのテーブルを見ないことによって....あなたのDateTimeがこれら2つの州だけで一意である場合、このクエリを試してみてください. ...自分で最適化できます...しかし、とにかく「case when」ステートメントを使用できます

SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = DateAdd(HOUR,-24,GetDate())
SET @EndDate = GetDate()
SET NOCOUNT OFF
SELECT Sum(case when temp.Value = 2 and temp2.value< 1400 then 1 else 0 end ) 
AS 'failureCount'
From (
 SELECT  *
 FROM History
 WHERE History.TagName IN ('RTO_FCV601_STS')
 AND wwRetrievalMode = 'Cyclic'
 AND wwCycleCount = 96
 AND wwVersion = 'Latest'
 AND DateTime >= @StartDate
AND DateTime <= @EndDate)as temp 
join
 (SELECT  * FROM History
   WHERE History.TagName IN ('RTO_COMB1TEMP')
   AND wwRetrievalMode = 'Cyclic'
   AND wwCycleCount = 96
   AND wwVersion = 'Latest'
   AND DateTime >= @StartDate
   AND DateTime <= @EndDate)as temp2 on temp.DateTime = temp2.DateTime

WHERE temp.StartDateTime >= @StartDate and temp2.StartDateTime >= @StartDate
于 2013-04-09T22:05:10.020 に答える