2012-09-04 2 views
0

일부 값의 합에 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 

어떤 도움을 주시면 감사하겠습니다. 이전에 들렀던 것보다 더 도움이 되었기를 바랍니다.

+2

시도가 잘못되었습니다. –

+0

FROM 절에 SYNTAX 오류가 있다는 메시지가 표시되고 'FROM CostBaseQuery AS qb2' – Magda

답변

1

질문 다른 SO 사용자에게 정말 유용하지 않습니다 당신은 당신의 실제 문제를 언급하지 않습니다하지만 난 방법을 쿼리를 들여 만약 내가

SELECT 
       b.CompanyName 
      , b.AssetName 
      , b.Year 
      , (
       b.CalculationResult + 
       mp.CalculationResult 
      ) AS NumberOfWellCompletions 

    FROM 
     (
      SELECT 
          CompanyName 
         , AssetName 
         , Year 
         , SUM(q1.DatapointValue) AS CalculationResult 
       FROM 
         CostBaseQuery AS q1 
       WHERE 
         DatapointID in (
          4032, 
          4033, 
          3036, 
          4035, 
          4038, 
          4037, 
          4034, 
          4039) 
       GROUP BY 
          CompanyName 
         , AssetName 
         , Year 
     ) AS b 
    LEFT JOIN 
     (
      SELECT 
          CompanyName 
         , AssetName 
         , Year 
         , (
          SUM(
           IIF(
            qb2.DatapointValue>=5, 
            IIF(
             qb2.DatapointValue<20, 
             qb3.DatapointValue, 
             0), 
            0) 
         ) 
       FROM 
         CostBaseQuery qb3     
       WHERE 
         qb3.CompanyName = qb2.CompanyName 
        AND 
         qb3.AssetName = qb2.AssetName 
        AND 
         qb3.Year = qb2.Year 
        AND 
         qb3.DatapointID = 4025     
       GROUP BY 
          CompanyName 
         , AssetName 
         , Year 
     ) 
    // What is going on here, this doesn't make sense. 
    ) AS CalculationResult 
FROM 
      CostBaseQuery AS qb2 
WHERE 
      DatapointID = 4058 
GROUP BY 
      CompanyName 
      , AssetName 
      , Year 
) AS mp 
    ON 
      (b.CompanyName = mp.CompanyName) 
     AND 
      (b.AssetName = mp.AssetName) 
     AND 
      (b.Year = mp.Year); 

나는 당신 것을 볼 수있다,이처럼 좋아 대괄호가 잘못되어 액세스 구문 분석기에 구문 오류가 있다고 말한 것과 같습니다.

나는 당신을 위해 당신의 질의를 작성하고자한다면, 나는 데이터베이스 shcema에 대한 더 많은 정보를 필요로 할 것이다. 그러나 파싱 할 수있는 SQL을 작성해야합니다.

관련 문제