[英]How to use the average function with multiple conditional statements using SQL in Visual Studio SSRS 2008
[英]How to use multiple conditional statements using SQL in Visual Studio SSRS 2008
我试图使用Visual Studio SSRS 2008从SQL数据库中提取计算的数据。尝试在select / from / where语句中使用条件条件时遇到问题。 我要尝试执行的一个示例是从每15分钟抽取的样本中找出24小时内的故障总数(从昨天的10:00 am到今天的10:00 am)。 我正在报告一家天然气厂,当阀门打开时,天然气会流经阀门。 穿过特定打开阀的气体在燃烧室中被点燃。 发生这种情况时,如果阀门打开并且燃烧室中的温度低于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中找到一种方法。 先谢谢您的帮助!
在我的想法中,并且不看您的表。...我说,如果仅针对这两个州,您的DateTime是唯一的,尽管我建议您(也是我的想法),但尝试在下面的Datetime进行连接有点不合逻辑...您可以自己优化它...但是无论如何您都可以使用“ 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.