首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access和/或SQL中的交叉表查询以完成表组合

Access和/或SQL中的交叉表查询以完成表组合
EN

Stack Overflow用户
提问于 2015-04-10 18:02:30
回答 1查看 356关注 0票数 1

我有一个调查(多标准决策分析),它将结果转储到下表,名为CriteriaWeighting。

代码语言:javascript
复制
User | Criteria1 | Criteria2 | ... | CriterX
--------------------------------------------
Name1|   n1w1    |    n1w2   | ... |   n1wX |
Name2|   n2w1    |    n2w2   | ... |   n2wX |
...

我想创建一个名为WeightinStats的新表,其结构如下:

代码语言:javascript
复制
Criteria  |  Average  |  StDev  |  Var  |
-----------------------------------------
Criteria1 |  AVG(c1)  | StD(c1) | Var(c1)
Criteria2 |  AVG(c2)  | StD(c2) | Var(c2)
Criteria3 |  AVG(c3)  | StD(c3) | Var(c3)
...       |  ...      | ...     | ...
CriteriaX |  AVG(cX)  | StD(cX) | Var(cX)

其中AVG(c1)、StD(c1)、Var(c1)等是上述所有标准加权响应(n1w1、n1we、n1wX等)的平均值、std和方差。

我尝试过实现交叉表查询,但它从来没有正确的出现,所以我想知道是否有一种方法可以通过SQL强制创建所需的表。我正在使用MSAccess 2010。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-10 23:29:40

不幸的是,交叉表是相反的。如果您从所需的结构(WeightsinStats)开始,并且需要原始结构(CriteriaWeighting),那么交叉表查询就可以实现它。当然,在转换后的终端上进行聚合。

原因是,交叉表查询以这样的方式转换记录集:从一个列中的值项变成单独的单独列,并聚合相应的数字: Sum()、Avg()、Count().

但是,您可能需要执行一个UNION查询。请注意:根据复杂性,对联合的数量有访问SQL限制。

代码语言:javascript
复制
SELECT 'Criteria1'  As Criteria, Avg([Criteria1]), StDev([Criteria1]), Var([Criteria1])
FROM CriteriaWeighting
UNION 
SELECT 'Criteria2' As Criteria, Avg([Criteria2]), StDev([Criteria2]), Var([Criteria2])
FROM CriteriaWeighting
...

如果有多个条件,则可以使用VBA动态构建联合查询:

代码语言:javascript
复制
Dim db As Database
Dim strSQL As String
Dim qdef As QueryDef
Dim i As Integer, AllCriteriaCount As Integer

AllCriteriaCount = ??  'ENTIRE FULL COUNT OF CRITERIA HERE

Set db = Currentdb

' BUILD SQL STRING
For i = 1 To AllCriteriaCount

  If i = 1 Then
    strSQL = "SELECT 'Criteria1'  As Criteria, Avg([Criteria1]), StDev([Criteria1]), Var([Criteria1])" & _
             " FROM CriteriaWeighting"
  Else
    strSQL = strSQL & "UNION" & _
             " SELECT 'Criteria" & i & "' As Criteria, Avg([Criteria" & i & "]), StDev([Criteria" & i & "]), Var([Criteria" & i & "])" & _
             " FROM CriteriaWeighting"
  End If
Next i

' CREATE QUERY DEF (STORED QUERY)
Set qdef = db.CreateQueryDef("WeightinStatsquery", strSQL)

' MAKE-TABLE TO OUTPUT FINAL
db.Execute "SELECT * WeightinStatsquery INTO WeightinStats"

Set qdef = Nothing
Set db = Nothing
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29567950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档