我希望我的查询结果如下所示:
Person1 Person2 Person3 Person4 Total
Status1 2 4 7 3 16
Status2 0 1 0 3 4
Status3 0 0 0 0 0
Status4 0 1 3 0 4
Total 2 6 10 6 24
我能够获得除了底行之外的所有内容:
TRANSFORM Count(personName)
SELECT status, Count(status) AS Total
FROM table1
GROUP BY status
PIVOT personName
我找到了一些关于使用UNION来解决最后一行的问题,但我似乎无法做到这一点。这似乎应该是一种常见的活动。
答案 0 :(得分:5)
您基本上必须运行两次查询 - 一次获取数据,然后第二次提供聚合。如果您已经开始这样做,请进行第一个查询以将数据返回给自己的对象。然后进行另一个查询以聚合第一个另一个对象。创建一个最终的第三个查询对象,使用你提到的UNION
来组合这两个查询对象。
虽然我不得不说我不推荐这个。听起来你正试图强制SQL生成一些真正的表示信息(即它不属于同一个数据集)。
答案 1 :(得分:5)
这个问题实际上有一个简单的解决方案。设计交叉表查询后,在查询中进入设计模式,然后在“主页”选项卡的“记录”部分中选择“总计”。然后你可以选择总和或计数等....
这是一个提供步骤的链接:http://office.microsoft.com/en-us/access-help/display-column-totals-in-a-datasheet-HA001233062.aspx
答案 2 :(得分:0)
我一直在寻找解决方案。除了根据交叉表编写查询,然后将其加总并在联合查询中添加到底部之外,找不到其中一个。因为我尝试从表单内部执行所有SQL语句(更易于部署),所以我不喜欢这种方法:从代码中编写或重新填充Querydef / view等。
如果您在表单上的子表单中显示结果,则可能会执行以下操作:
在子窗体下方,另一个子窗体足够短,只能容纳1个 记录。
将表单中的控件绑定到函数,如下所示:
control1 = fnADOSum(yourCrosstabfield1, yourCrosstabSQL)
Public Function fnADOSum(fldName As String, strInputSQL As String) As Double
On Error GoTo ERRHANDLER
Dim RS1 As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim StrSQL As String
Dim dblRunTot As Double
Set RS1 = New ADODB.Recordset
RS1.CursorLocation = adUseServer
Set cnn = CurrentProject.Connection
dblRunTot = 0
With RS1
.Open strInputSQL, cnn, adOpenForwardOnly, adLockReadOnly
If Not .EOF And Not .BOF Then
.MoveFirst
Do Until .EOF
dblRunTot = dblRunTot + Nz(.Fields(fldName).Value, 0)
.MoveNext
Loop
End If
.Close
End With
fnADOSum = dblRunTot
'CLEAN UP:
cnn.Close
Set RS1 = Nothing
Set cnn = Nothing
EXITHANDLER:
Exit Function
ERRHANDLER:
'' your own error handling proc
'' LogError err.Number, err.Description
End Function
答案 3 :(得分:0)
Lydia写道:“这个问题实际上有一个简单的解决方案。一旦设计了交叉表查询,在查询中进入设计模式,并在”主页“选项卡的”记录“部分选择”总计“。然后您可以选择总和或计数等......“
进入设计模式并不适合我:
[我正在使用Access 2013]
答案 4 :(得分:0)
经过多次尝试和错误发现...
要在输入表单或子表单时打开总计行,您可以在表单代码中添加以下 VBA:
Private Sub YourFormName_Enter()
If Application.CommandBars.GetPressedMso("RecordsTotals") = False Then
Application.CommandBars.ExecuteMso "RecordsTotals"
End If
End Sub