访问 2010 SQL 查询死胡同



我需要为一个项目创建一个数据库。在过去的几个月里,我一直在学习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 字段(透视横断面字段)中的每个值都通过字段 1、2 或 3/总和(分别为 1、2 或 3 个值)*100 中的单元格值进行格式化。我在删除 Null 时也遇到了问题。我已经使用Nz函数取得了一定程度的成功。只有我让我的 AVG 不考虑新插入的 O 值并扔掉 AVG。 STDEV 是你每天运行的工厂流行 stdev。SE 表示错误。.在本例中为 STDEV/3(即横断面总数)。感谢您的任何和所有帮助,为我指明正确的方向。我每天都在学习新技巧!乐于接受建议

创建 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;

qry结果

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 *。

最新更新