2013-04-10 1 views
0

Visual Studio SSRS 2008을 사용하여 SQL 데이터베이스에서 계산 된 데이터를 추출하려고합니다. 선택/from/where 문. 제가하려는 일 중 하나는 5 분마다 샘플을 24 시간 동안 (어제 오전 10시에서 오늘 오전 10 시까 지) 판매 한 평균 수의 BTU를 찾는 것입니다. 가스 밸브가 열려있을 때 밸브를 통과 할 때 가스 유량 값이있는 가스 플랜트에 대해보고합니다. 특정 개방 밸브를 통해 흐르는 가스의 평균값은 BTU 값입니다. 내가 아래에 내 현재 쿼리를 복사했는데 실패가있다,하지만 그것이 될 필요가 가까이에 있다고 생각합니다. 내가 값을 평균하려는 태그 이름은 아래에 언급 된 다른 두 태그 인 경우> 0Visual Studio SSRS 2008에서 SQL을 사용하여 여러 조건문에 평균 함수를 사용하는 방법

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 
+1

이 작업을 수행 할 때 반환되는 데이터 행이 단지 temp 및 temp2 값의 평균을 나타낼 것으로 예상됩니까? 또한 PGPOL_ProdVlv 및 DTE_C_SCFM과 비교할 때 DTE_BTU에서 사용할 값을 어떻게 알 수 있습니까? 나는 3 명 모두가 역사표에 있다고 가정하고 있습니까? –

+0

다른 2 개의 태그가> 0 인 지난 24 시간 동안의 DTE_BTU 태그 값의 평균 인 단일 값을 기대합니다.temp 및 temp2 값을 계산에 사용하지 않고 두 조건이 모두> 0인지 확인하기 위해 조건부에만 사용합니다. DTE_BTU 값은 temp 값이> 0 인 동안 5 분마다 수집됩니다. 예, 그들은 모두 역사표에 있습니다. 고맙습니다. – singledee

답변

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 값의 평균을 대가로 당신에게 하나 개의 행을 제공해야합니다.

+0

Thanks Jason! 비록 내가 얻고있는 결과가 정확하다는 것을 완전히 검증하지는 않았지만, 쿼리가 뱉어 내고있는 가치는 그것이 있어야하는 것에 관한 것처럼 보입니다. – singledee

+0

Jason, 위의 AND와 거의 다른 쿼리가 하나 있습니다. 단 하나의 태그 또는 다른 태그가 = 1 인 경우 값을 평균하고 싶습니다. AND를 OR 선택 문 사이에 OR로 바꾼 경우 오류가 발생합니다. 이 쿼리를 작동 시키려면 OR을 어디에 두어야합니까? 감사! – singledee

+0

괄호 안에 두 개의 기존 수표를 싸고 싶습니다. 위의 'AND EXISTS (blah) AND EXISTS (blah)'대신 'AND (EXISTS (blah) OR EXISTS (blah))'의 효과가있는 것입니다. –

0

나는 암갈색 "코멘트를 추가"이유를 알고 DTE_BTU입니다 어쨌든 .... 나를 위해 여기 오프 친구입니다 ... 나는이 문제를 해결할 수 있지만 조금 비논리적 인 방법입니다 ... U .. 당신이 모든 주마다 하나의 테이블을 사용하거나 만들 수 있었고 모든 제출에 대해 테이블을 사용한 다음 당신의 상태에 관련된 모든 테이블에 제출하기 위해 테이블에서 FK를 넣어 .... 나는이 의미 :

당신이 표 "제출"도 ... 표 "PGPOL_ ProdVlv가 "- 표"DTE_C_SCFM "- 표"DTE_BTU은 "... 내가 의미 .infact 모든 주 (1 : N)에 대해 하나 개의 테이블을 사용하는 것을 의미

표 관계" "
1.NO
(2)를 제출합니다. 시간
3.and 다른 열

다음

표 "PGPOL_ProdVlv"
1.No
2.FK_

표 "DTE_C_SCFM"
1.No
2.FK_NoSubmit

및 다른 국가 위의 테이블과 같은 NoSubmit ... 이 쿼리를 만들었습니다 수 더 간단하고 빠른 까지 ... 같은 시간에이 주를 삽입하고 있습니다 ...

+0

Faud는 유감이지만 SQL 기술은 제한되어 있으므로 위의 답변을 통해 나에게 무엇을 말하려고하는지 이해하지 못합니다. – singledee

+0

안녕 친구 dun talk so :) 당신은 최고입니다. :) 단계별로 기술을 단계적으로 향상시킬 수 있습니다 ... 내 영어가 전문적인 수준이 아니라는 것을 알고 있습니다. 저는 당신을 도우려는 것 뿐이었지만 SQL에 대한 지식이 제한적이라 할지라도 내 의미를 갖지 못했습니다 ... 지금 제이슨의 대답을 보라. 이게 도움이되지 않으면 쿼리에 대해 생각해보십시오. – Fuad