2013-11-21 4 views
1

: 이것은 다른 사용을 통해 해결액세스 2010 크로스 탭 쿼리 식 - 한 쿼리에서 나는이 표현 추가 할

TRANSFORM 
     Sum(Data.Spending) 
SELECT 
     Data.Category 
FROM 
     Data 
WHERE 
     (((Data.Year)="2012" Or (Data.Year)="2013")) 
GROUP BY 
    Data.Category 
PIVOT 
    Data.Year; 

: 아래의 크로스 탭 쿼리에 필드로

([2013]/[2012]-1) AS [Change%] 

을 이 스레드의 테이블 : Access 2007 Crosstab Query Expression

그러나 내 목적을 위해 하나의 쿼리에서 모든 것을 가지고 있어야합니다.

다른 프로그램에서 쿼리를 사용하여 Access 데이터베이스에 직접 액세스하는 http://www.ljzsoft.com/ppt-report.htm에 SQL을 쓰고 있기 때문입니다.

답변

0

Access에서 크로스 탭 쿼리를 하위 쿼리로 사용할 수 없습니다. 우리가하려고하면

SELECT ... 
FROM 
    (
     TRANSFORM 

우리는 "구문 오류 FROM 절"에서 얻을. 한 가지 해결 방법은 모든 집계를 수행하고, 파생 된 (계산 된) 값을 만들고, 함께 UNION 한 다음 "크로스 탭"을 작성하는 것입니다. 귀하의 경우 : 그 다음 당신이보고 도구는 계산 보고서 필드를 지원하는지 여부를 조사 할 수 있습니다 원하는대로 너무 심한 경우 내 샘플 데이터,

Category 2012 2013 Change%   
--------- ---- ---- ----------------- 
Category1 123 345 1.80487804878049 
Category2 234 456 0.948717948717949 

를 반환

TRANSFORM Sum(ColValue) AS SumOfColValue 
SELECT Category 
FROM 
    (
      SELECT Category, [Year] AS ColHead, Sum(Spending) AS ColValue 
      FROM Data 
      WHERE [Year] IN ("2012", "2013") 
      GROUP BY Category, [Year] 
     UNION ALL 
      SELECT 
       curr.Category, 
       "Change%" AS ColHead, 
       (curr.SumOfSpending/prev.SumOfSpending-1) AS ColValue 
      FROM 
       ( 
        SELECT Category, [Year], Sum(Spending) AS SumOfSpending 
        FROM Data 
        WHERE [Year] IN ("2012", "2013") 
        GROUP BY Category, [Year] 
       ) AS curr 
       INNER JOIN 
       ( 
        SELECT Category, [Year], Sum(Spending) AS SumOfSpending 
        FROM Data 
        WHERE [Year] IN ("2012", "2013") 
        GROUP BY Category, [Year] 
       ) AS prev 
        ON prev.Category = curr.Category 
         AND CLng(prev.[Year]) = (CLng(curr.[Year]) - 1) 
    ) 
GROUP BY Category 
PIVOT ColHead 

(예 : , Crystal Reports에서는 "수식 필드"라고합니다.)

+0

감사합니다. 이것은 완벽하게 작동했습니다 :) 저는 포럼에 처음 왔으며 이것은 굉장한 시작이었습니다. – JRob