Access中的交叉表查询and/orSQL完成table组合
Crosstab Query in Access and/or SQL to accomplish table combination
我有一个调查(多标准决策分析)将结果转储到以下 table 名为 CriteriaWeighting:
User | Criteria1 | Criteria2 | ... | CriterX
--------------------------------------------
Name1| n1w1 | n1w2 | ... | n1wX |
Name2| n2w1 | n2w2 | ... | n2wX |
...
我想创建一个名为 WeightinStats 的新 table,结构如下:
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 等)的平均值、标准偏差和方差。 )
我曾尝试过执行交叉表查询,但结果总是不对,所以我想知道是否有办法通过 SQL 强制创建所需的 table。我正在使用 MSAccess 2010。
感谢您的帮助。
不幸的是,交叉表正好相反。如果您从所需的结构 (WeightsinStats) 开始并需要原始结构 (CriteriaWeighting),交叉表查询可以实现它。当然在转换端进行聚合。
原因是,crosstab queries 以这样一种方式转换记录集,即一列中的值项成为单独的单独列,并聚合相应的数字:Sum()、Avg()、Count()。 ..
但是,向后退,您可能需要执行 UNION 查询。请注意:根据复杂性,联合数量存在访问 SQL 限制。
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:
动态构建联合查询
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
我有一个调查(多标准决策分析)将结果转储到以下 table 名为 CriteriaWeighting:
User | Criteria1 | Criteria2 | ... | CriterX
--------------------------------------------
Name1| n1w1 | n1w2 | ... | n1wX |
Name2| n2w1 | n2w2 | ... | n2wX |
...
我想创建一个名为 WeightinStats 的新 table,结构如下:
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 等)的平均值、标准偏差和方差。 )
我曾尝试过执行交叉表查询,但结果总是不对,所以我想知道是否有办法通过 SQL 强制创建所需的 table。我正在使用 MSAccess 2010。
感谢您的帮助。
不幸的是,交叉表正好相反。如果您从所需的结构 (WeightsinStats) 开始并需要原始结构 (CriteriaWeighting),交叉表查询可以实现它。当然在转换端进行聚合。
原因是,crosstab queries 以这样一种方式转换记录集,即一列中的值项成为单独的单独列,并聚合相应的数字:Sum()、Avg()、Count()。 ..
但是,向后退,您可能需要执行 UNION 查询。请注意:根据复杂性,联合数量存在访问 SQL 限制。
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:
动态构建联合查询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