0

Visual Studio SSRS 2008 を使用して、計算されたデータを SQL データベースから取得しようとしています。select/from/where ステートメントで条件を使用しようとすると問題が発生します。私がやろうとしていることの一例は、5 分ごとに採取されたサンプルから、24 時間 (昨日の午前 10 時から今日の午前 10 時まで) に販売された BTU の平均数を見つけることです。バルブが開いているときにバルブを通過するときにガス流量値を持つガスプラントについて報告しています。特定の開いたバルブを流れるガスには、平均化する必要がある BTU 値があります。失敗した現在のクエリを以下にコピーしましたが、必要なものに近いと思います。下記の他の 2 つのタグが > 0 の場合、値を平均したいタグ名は DTE_BTU です。

SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = DateAdd(HOUR,-24,GetDate())
SET @EndDate = GetDate()
SET NOCOUNT OFF
SELECT case when temp.Value > 0 and temp2.value > 0 then AVG(Value where tagname ='DTE_BTU') end AS 'AvgDTEBTU'
From (
SELECT *
FROM History
WHERE History.TagName IN ('PGPOL_ProdVlv')
AND wwRetrievalMode = 'Cyclic'
AND wwCycleCount = 288
AND wwVersion = 'Latest'
AND DateTime >= @StartDate
AND DateTime <= @EndDate)as temp join
(SELECT * FROM History
WHERE History.TagName IN ('DTE_C_SCFM')
AND wwRetrievalMode = 'Cyclic'
AND wwCycleCount = 288
AND wwVersion = 'Latest'
AND DateTime >= @StartDate
AND DateTime <= @EndDate)as temp2 on temp.DateTime = temp2.DateTime
WHERE temp.StartDateTime >= @StartDate and temp2.StartDateTime >= @StartDate
4

2 に答える 2

1

私があなたの情報を正しく理解していると仮定すると、その期間の履歴テーブルに他の 2 つのタグが存在するかどうかを確認する必要があるだけのように思われるため、必ずしも case ステートメントは必要ありません。

SELECT AVG(Value) as Avg_DTE_BTU
FROM History h
WHERE h.wwRetrievalMode = 'Cyclic'
AND h.wwCycleCount = 288
AND h.wwVersion = 'Latest'
AND h.DateTime >= @StartDate
AND h.DateTime <= @EndDate
AND h.tagname = 'DTE_BTU'
AND EXISTS 
(
  SELECT 1
  FROM History x
  WHERE x.wwRetrievalMode = 'Cyclic'
  AND x.wwCycleCount = 288
  AND x.wwVersion = 'Latest'
  AND x.DateTime >= @StartDate
  AND x.DateTime <= @EndDate
  AND x.tagname = 'PGPOL_ProdVlv'
  AND x.value > 0
)
AND EXISTS 
(
  SELECT 1
  FROM History y
  WHERE y.wwRetrievalMode = 'Cyclic'
  AND y.wwCycleCount = 288
  AND y.wwVersion = 'Latest'
  AND y.DateTime >= @StartDate
  AND y.DateTime <= @EndDate
  AND y.tagname = 'DTE_C_SCFM'
  AND y.value > 0
)

上記は、時間範囲内に他の 2 つのタグ名も存在する場合、時間範囲内のすべての DTE_BTU 値の平均を取得し、1 行を返す必要があります。

于 2013-04-11T02:38:36.470 に答える
0

「コメントを追加」がここでオフになっている理由がわかりません....とにかく友達...私もこの問題を解決できますが、それは少し非論理的な方法です...あなたは何を知っていますか...あなたが使用できたと思いますまたは、州ごとに1つのテーブルを作成し、送信ごとにテーブルを使用してから、州に関連するすべてのテーブルに送信するためにテーブルからFKを配置しました....私はこれを意味しました:

テーブル「Submit」と...テーブル「PGPOL_ProdVlv」-テーブル「DTE_C_SCFM」-テーブル「DTE_BTU」...すべての状態に1つのテーブルを使用することを意味しました.infact私は(1:N)関係を意味しました

テーブル「送信」
1.NO
2.時間
3.その他の列

その後

テーブル「PGPOL_ProdVlv」
1.いいえ
2.FK_NoSubmit

テーブル「DTE_C_SCFM」
1.いいえ
2.FK_NoSubmit

また、上記のような他の状態をテーブルとして...これにより、私が得た限り、クエリをよりシンプルかつ高速にすることができました...これらの状態を同時に挿入しています...

于 2013-04-10T21:55:26.977 に答える