将变换应用于复杂子查询时,MS-ACCESS无法识别字段

时间:2015-03-12 16:05:50

标签: sql ms-access

请原谅我的英语不是很好,所以我求你理解。

第一,我不得不说我不是很好用Access :)。我在工作中使用它来自动化一些报告,它真的很有用......从那时起!我坚持让这个工作好几个月,我必须让它工作。

我有一个包含一些表的数据库,我想以精确的方式提取和排序外贸表,以便在季度报告中使用它。我已经完成了大部分表格,但仍然很难实现。

我必须制作一张表格,显示出口/进口商品按商品分类的最后五个季度的变化和当前季度的年度变化。

所以起初我试图提出一个请求,给出每年和每季度产品的四分之一变化。 sql代码如下所示:

SELECT Courant.anm, 
       Courant.ctci4, 
       Courant.maxa, 
       Sum(Iif(( ( Courant.valeur - Ancien.valeura ) / Ancien.valeura ) * 100 IS 
               NULL, 
           0, ( 
               ( Courant.valeur - Ancien.valeura ) / Ancien.valeura ) * 100)) AS 
       VTR 
FROM   (SELECT B.annee, 
               B.mois, 
               B.annee & B.mois                                     AS ANM, 
               (SELECT Max(base1.annee & base1.mois) 
                FROM   base1 
                WHERE  base1.annee & base1.mois < B.annee & B.mois) AS MaxA, 
               B.ctci4, 
               Sum(B.valstat)                                       AS Valeur 
        FROM   base1 B 
        WHERE  ( Len(B.ctci4) ) = 1 
               AND ( B.flux = "e" 
                      OR B.flux = "r" ) 
        GROUP  BY B.annee, 
                  B.mois, 
                  B.ctci4) AS Courant 
       INNER JOIN (SELECT base1.annee & base1.mois AS ANM, 
                          base1.ctci4, 
                          Sum(base1.valstat)       AS ValeurA 
                   FROM   base1 
                   WHERE  ( Len(base1.ctci4) ) = 1 
                          AND ( base1.flux = "e" 
                                 OR base1.flux = "r" ) 
                   GROUP  BY base1.annee & base1.mois, 
                             base1.ctci4) AS Ancien 
               ON ( Courant.ctci4 = Ancien.ctci4 ) 
                  AND ( Courant.maxa = Ancien.anm ) 
GROUP  BY Courant.anm, 
          Courant.ctci4, 
          Courant.maxa 

请求的那部分效果很好。事实上,我给了一个连接ID(Courant.ANM),我已经创建了内部连接同一个表的另一个副本,以便能够在同一记录上显示当前值和上一季度的值,产品代码,上一期间的ID(连接年份和季度)以及以百分比显示上一期间变化的字段VTR。

要完成,我必须使用TRANSFORM制作数据透视表。我必须把年和年列中的四分之一(ANM),行中的产品代码(CTCI4)和值,但是当我尝试时,MS ACCESS表示B.annee不被识别为有效的字段名称。即使我以不同的名字命名我也不行!请有人告诉我该怎么做?

1 个答案:

答案 0 :(得分:0)

这是Access枢轴的代码,其中包含您提到的字段(我使用了假表名 - 测试):

TRANSFORM Count(test.CTCI4) AS CountOfCTCI4
SELECT test.CTCI4
FROM test
GROUP BY test.CTCI4
PIVOT test.ANM;

关于B.annee的错误在我看来似乎是在数据进入Transform / Pivot之前发生的。尝试将查询分成几部分并对其进行测试 - 首先是子查询。