0

我正在尝试使用 Visual Studio SSRS 2008 从 SQL 数据库中提取计算数据。尝试在我的 select/from/where 语句中使用条件时遇到问题。我正在尝试做的一个例子是从每 5 分钟采集的样本中找到 24 小时内(从昨天上午 10:00 到今天上午 10:00)销售的 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

假设我正确理解了您的信息,您似乎真的只需要查看该时间段的历史表中是否存在其他两个标签,因此您不一定需要案例陈述。

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
)

如果时间范围内还存在其他两个标签名称,则上述应取该时间范围内所有 DTE_BTU 值的平均值,并返回一行。

于 2013-04-11T02:38:36.470 回答
0

我不知道为什么“添加评论”对我来说是关闭的......无论如何朋友......我也可以解决这个问题,但它有点不合逻辑......你知道......我想你可以使用或为每个州创建一个表格,然后为每个提交使用一个表格,然后从表格中放置一个 FK 用于提交到与您的州相关的每个表格......我的意思是:

你有表“提交”,还有......表“PGPOL_ProdVlv” - 表“DTE_C_SCFM” - 表“DTE_BTU”......我的意思是每个状态都使用一个表。事实上我的意思是(1:N)关系

表“提交”
1.NO 2.Time 3.
其他
栏目

接着

表“PGPOL_ProdVlv”
1.No
2.FK_NoSubmit

表“DTE_C_SCFM”
1.No
2.FK_NoSubmit

以及上面的其他状态作为表格...据我所知,这可以使您的查询更加简单和快捷...您同时插入这些状态...

于 2013-04-10T21:55:26.977 回答