0

我需要为一个项目创建一个数据库。在过去的几个月里,我一直在学习 MS Access 2010 的基础知识,并开始涉足 SQL 以进行更具体的查询。话虽如此,我对程序的功能有一些非常基本的了解和知识。

我正在尝试从单个表创建查询以显示一系列计算。我已经取得了很大的进步,但现在我摸不着头脑,转而寻求帮助。

Table: LIT_ALL

SITE  DATE    TRANSECT  CATEGORY  DISTANCE_M
PIT  6/2/2011     1        RKC      0.25
PIT  6/2/2011     1        FMA      0.58
PIT  6/2/2011     1        LHC      0.75
PIT  6/2/2011     2        FMA      0.5
PIT  6/2/2011     2        SA       0.6
PIT  6/2/2011     2        RKC      0.52
PIT  6/2/2011     2        LHC      0.6
PIT  6/2/2011     3        CCA      0.59
PIT  6/2/2011     3        LHC      0.6
PIT  6/2/2011     3        FMA      0.52

使用此代码

TRANSFORM Sum(DISTANCE_M) AS SumOfDISTANCE_M
SELECT SITE, DATE, [CATEGORY]
FROM LIT_ALL
GROUP BY SITE, DATE,[CATEGORY]
PIVOT TRANSECT;

我的最终产品有部分格式

SITE  DATE      CATEGORY   1    2    3 
PIT   6/2/2011  CCA                  .59
PIT   6/2/2011  FMA       .58  .5    .52
PIT   6/2/2011  LHC       .75  .6    .6
PIT   6/2/2011  RKC       .25  .52    
PIT   6/2/2011  SA             .6

除了一些死胡同,我一直无法产生这样的结果。

SITE    DATE     CATEGORY   1      2      3     AVG    STD    SE
PIT    6/2/2011  CCA       0.00   0.00   34.5   11.5   19.92  6.64
PIT    6/2/2011  FMA       36.71  22.52  30.41  29.88  7.11   2.37
PIT    6/2/2011  LHC       47.47  27.03  35.09  36.53  10.30  3.43
PIT    6/2/2011  RKC       15.82  23.42  0.00   13.08  11.95  3.98
PIT    6/2/2011  SA        0.00   27.03  0.00   9.01   15.60  5.20

此示例中显示的值是百分比值。1,2,3 字段(Pivoted Transect Field)中的每个值都通过字段 1,2 中的单元格值或 3/sumtotal(分别为 1,2 或 3 值)*100 形成。我在删除 Null 时也遇到了问题。我已经使用 Nz 函数取得了一定程度的成功。只有我让我的 AVG 不考虑新插入的 O 值并将 AVG 扔掉。STDEV 是您日常运行的流行 stdev。SE代表错误..在这种情况下是STDEV / 3(即横断面的总数)。感谢您为我指明正确方向的所有帮助。我每天都在学习新技巧!接受建议

4

1 回答 1

0

创建 2 个查询,其中之一是您的支点。第二个查询是一个标准选择,其中包含 avg、stdev 和 se 的聚合。然后创建第三个查询,将数据透视查询连接到聚合。我更改了一些字段名称只是因为。

qryPivot

 TRANSFORM Sum(LIT_ALL.DISTANCE) AS SumOfDISTANCE
 SELECT LIT_ALL.SITE, LIT_ALL.dtDATE, LIT_ALL.[CATEGORY]
 FROM LIT_ALL
 GROUP BY LIT_ALL.SITE, LIT_ALL.dtDATE, LIT_ALL.[CATEGORY]
 PIVOT LIT_ALL.TRANSECT;

qryStats

 SELECT LIT_ALL.Site, LIT_ALL.dtDate, LIT_ALL.category, Avg(LIT_ALL.distance) AS Mean,
 StDev(LIT_ALL.distance) AS SD, StDev([distance])/3 AS SE
 FROM LIT_ALL
 GROUP BY LIT_ALL.Site, LIT_ALL.dtDate, LIT_ALL.category;

查询结果

SELECT qryPivot.*, qryStats.Mean, qryStats.SD, qryStats.SE
FROM qryPivot INNER JOIN qryStats ON (qryPivot.CATEGORY = qryStats.category) AND 
(qryPivot.dtDATE =   qryStats.dtDate) AND (qryPivot.SITE = qryStats.Site);

因为可能并不总是知道数据透视列的名称,所以我使用 select *.

于 2012-08-15T12:38:23.673 回答