2012-09-05 1 views
1

일부 값의 합계와 IF 문의 결과가 포함 된 계산을 Access에서 코딩하려고합니다.SQL 조건부 합계

여기 (

CompanyName Year AssetName DatapointID Datapointname    DatapointValue 
CompanyA 2011 AssetA  4025   Active operated wells   129 
CompanyA 2011 AssetA  4058   API gravity of oil    38.5563255 
CompanyA 2011 AssetA  4032   Number of gas lift wells  70 
CompanyA 2011 AssetA  4033   Number of wells with ESPs  0 
CompanyA 2011 AssetA  4036   Wells with CO2 production  25 
CompanyA 2011 AssetA  4035   Wells with H2S production  9 
CompanyA 2011 AssetA  4038   Wells with high pressure  0 
CompanyA 2011 AssetA  4037   Wells with high temperature  0 
CompanyA 2011 AssetA  4034   Wells with scale production  42 
CompanyA 2011 AssetA  4039   Wells with wax     0 

계산이 SUM (DatapointValue) DatapointID IN에 필요 ('CostBaseQuery에서) 4032,4033,4035 내가 다루고있어 데이터의 종류의 테이블 4036403740384039)

PLUS IF 문에서 리턴 값

오일 (API 중력 < = 5> 20의 값을 사용하면 ActiveOperatedWells, Else 0)

계산을 코딩하는 데 다음 방법을 사용하려고했지만 SUM 계산을 수행하는 대신 SUM의 각 반복에서 데이터를 출력하고 IF 문을 실행합니다.

SELECT qb1.CompanyName, qb1.AssetName, qb1.Year, 
(SUM(qb1.DatapointValue) 
+ IIF(qb2.DatapointValue>=5, 
     IIF(qb2.DatapointValue<20, qb3.DatapointValue, 0), 0)) 
AS NumberOfWellCompletions 

FROM (CostBaseQuery AS qb1 
    INNER JOIN CostBaseQuery AS qb2 
      ON qb1.CompanyYearAssetID=qb2.CompanyYearAssetID) 
    INNER JOIN CostBaseQuery AS qb3 
      ON qb1.CompanyYearAssetID=qb3.CompanyYearAssetID 

WHERE qb1.DatapointID IN (4032,4033,3036,4035,4038,4037,4034,4039) 
AND qb2.DatapointID=4058 AND qb3.DatapointID=4025 

GROUP BY qb1.CompanyName, qb1.AssetName, qb1.Year, 
qb1.DatapointValue, qb2.DatapointValue, qb3.DatapointValue 

어떤 도움이 많이 주시면 감사하겠습니다 그리고 나는 이것이 내 이전 산책보다 더 많은 의미가 희망!

+0

그러나 한 번에 하나의 매우 지역화 된 질문을 응용 프로그램으로 작성하고 있습니다. – Fionnuala

+0

나는 엑셀 모델에서 200+ 계산을 엑세스 모델로 옮기려고 노력하고있다. 그리고 나의 SQL 기술은 이상한 질문이 아니다. – Magda

답변

0
SUM(qb1.DatapointValue + IIF(ab2.DatapointValue <=5 AND qb2.DatapointValue > 20, qb3.DatapointValue, 0)) as NumberOfWellCompletions 
... 

GROUP BY qb1.CompanyName, qb1.AssetName, qb1.Year 
당신은 당신의 SUM (물론, 합계를 대해 명확하지,하지만 당신은 괄호의 문제가있을 수 있습니다)

을 단순화 할 수

<= 5 또는 >=5을 확인해야하는 경우 명확해야합니다 (질문에서 텍스트와 코드의 차이)

y our GROUP BY

+0

감사합니다. 내 IF 문을 단순화했지만 GROUP BY 편집은 집계 오류를 발생시킵니다. – Magda

+0

@Magda 글 머리 부분 (SUM)을 복사하면 GROUP BY 문제는 또한 사라져야합니다 (SUM에 대괄호 문제가있는 것 같습니다). 아니면 그냥 GROUP BY qb1.DatapointValue 제거하십시오 –

+0

네, 내 문제를 해결했습니다 정말 도움을 주셔서 감사합니다! :) – Magda

0

DatapointValue으로 그룹화하고 싶지 않습니다. 개별 값이고 사용자가 합계를 찾고 있기 때문입니다.

봅니다 변경 GROUP BY에 :

GROUP BY qb1.CompanyName, qb1.AssetName, qb1.Year 
+0

나는 처음에 시도했지만 에러가 발생했다. [내 계산]을 집계 함수의 일부로 포함하십시오 ' – Magda