2017-12-31 167 views
1

나는 며칠 동안 쿼리 문제로 고생하고 답변을 찾았으며 SQL에서 좋지 않기 때문에 찾은 논리를 적용 할 수 없을 수도 있다고 생각합니다. 나는 두 개의 테이블, [0100]과 [Product]를 가지고 있으며 각 카테고리에 대한 실제와 예측 사이의 분산을 계산해야합니다. 나는 서브 쿼리의 숫자를 시도했지만 그들이 그렇게이 다시 생각 동작하지 않습니다 : 내가 분산 열 작업을 일단액세스 하위 쿼리

SELECT 
    Product.Description, 
    Sum([0100].Actual) AS Actual, 
    Sum([0100].Forecast) AS Forecast, 
    Sum(IIf([0100]![Forecast]=0, 
      IIf([0100]![Actual]=0, 
       0, 
       IIf([0100]![Actual]>0,9.99,-9.99) 
      ), 
      ([0100]![Actual]-[0100]![Forecast])/[0100]![Forecast] 
     ) 
    ) AS Variance 
FROM 
    0100 
    INNER JOIN Product ON [0100].Category = Product.ID 
GROUP BY 
    Product.Description; 

, 나는 실제와 예측 열을 제거하지만 난 분산 열을 얻을 수 없습니다입니다 제대로 작동하려면 하위 쿼리가 필요하기 때문에 그것이 용의주도합니다. 이 공식 =IF(AND(B2=0,C2=0),0,IF(C2=0,IF(B2>0,9.99,-9.99),(B2-C2)/C2))

**Column A        B   C   Formula 
Account Group      Actual  Forecast  Variance** 
Admin & Management staff costs -8256.61 -8256.61   0% 
Bank interest      0    0   0% 
Care staff 4 weekly paid    268   268   0% 
Care staff travel -70 -70 0% 
Contracts - health & soc services -748317.97 -788317.97  -5% 
Donations & fundraising    -9665.69  -9465.69  2% 
Fundraising & promotion    4695.68  4695.68  0% 
Grants        -28687  -39687  -28% 

사람이 바로 분산 쿼리를 얻기에 도움을 제공 할 수 그렇게 함께 다음과 같은 스냅 샷에 따라 Excel에서 작업을 얼마나 계속하세요하기에 관해서는 노력 많은 시간을 갖는, 나는 딱하다 Excel 수식과 동일한 결과를 반환합니까? 나는 단지 제품 테이블과 0100 테이블을 가진 샘플 데이터베이스를 제공하며, Excel 결과를 반환하는 레코드를 가지고 있으며 링크를 첨부하거나 제공 할 수 있는지를 알 수 있습니다.

많은 감사,

사이먼

+0

질문에 실제 결과 및 예상 결과를 표시하십시오. 질문 (첨부 파일 없음)에는 답을 제공하는 데 필요한 모든 정보가 포함되어야합니다. –

+0

* 항상 오류 메시지 나 원하지 않는 결과를 게시 할 수는 있지만 작동하지 않을 경우 * 도움이되지 않습니다. – Parfait

답변

1

Excel의 Access에서 해당

=IF(AND(B2=0,C2=0),0,IF(C2=0,IF(B2>0,9.99,-9.99),(B2-C2)/C2)) 

은 다음과 같습니다

IIf([0100]![Actual] = 0 And [0100]![Forecast] = 0, 
    0, 
    IIf([0100]![Forecast] = 0, 
     IIf([0100]![Actual] > 0, 9.99, -9.99), 
     ([0100]![Actual]-[0100]![Forecast])/[0100]![Forecast] 
    ) 
) 

값은 Null (즉, 당신이있는 경우 빈 필드가 될 수있는 경우) Nz(x) = 0 대신를 테스트하십시오..

IIf(Nz([0100]![Actual]) = 0 And Nz([0100]![Forecast]) = 0, 
    0, 
    IIf(Nz([0100]![Forecast]) = 0, 
     IIf(Nz([0100]![Actual]) > 0, 9.99, -9.99), 
     (Nz([0100]![Actual])-Nz([0100]![Forecast]))/Nz([0100]![Forecast]) 
    ) 
) 

기능 IIf(condition, IfExpression, ElseExpression) 반환 IfExpression 또는 ElseExpression하지만 항상 두 표현식을 평가 하나. 따라서 값이 <> 0으로 테스트 된 경우에도 Nz() 함수를 적용해야합니다. Nz()은 을 Empty으로 변환하고 Empty은 형식의 기본값입니다. 숫자 유형은 0이고 문자열은 빈 문자열입니다.