5

我希望我的查询结果如下所示:

          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 来附加最后一行的东西,但我似乎不太明白这一点。看起来这应该是一个常见的活动。

4

5 回答 5

5

您基本上必须运行两次查询 - 一次获取数据,然后第二次提供聚合。如果您打算这样做,请进行第一个查询以将数据返回为自己的对象。然后进行另一个查询以聚合第一个另一个对象。创建最后的第三个查询对象以使用UNION您提到的 a 将两者结合起来。

虽然我不得不说我真的不推荐这个。听起来您正试图强制 SQL 生成一些真正的表现信息(即它不属于同一数据集)。

于 2011-04-25T18:44:42.827 回答
5

这个问题实际上有一个简单的解决方案。设计完交叉表查询后,进入查询中的设计模式并在“主页”选项卡的“记录”部分中选择“总计”。然后你可以选择 Sum 或 Count 等......

这是一个提供步骤的链接:http: //office.microsoft.com/en-us/access-help/display-column-totals-in-a-datasheet-HA001233062.aspx

于 2013-05-31T14:11:00.763 回答
0

我也一直在寻找解决方案。除了基于交叉表编写查询然后将该查询相加并添加到联合查询的底部之外,也找不到一个。由于我尝试从表单内部执行所有 SQL 语句(更易于部署),我不喜欢这种方法:从代码等中编写或重新填充 Querydef/视图。

如果您在表单的子表单中显示结果,您可以执行以下操作:

在子窗体下方,另一个子窗体足够短,只能容纳 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
于 2015-10-06T20:59:47.173 回答
0

Lydia 写道:“这个问题实际上有一个简单的解决方案。一旦你设计了交叉表查询,进入查询中的设计模式并在主页选项卡的记录部分中选择“总计”。然后你可以选择总和或数数之类的……”

进入设计模式对我不起作用:

  • 我运行了查询。
  • 然后转到主页选项卡
  • 记录部分中的选定总计
  • 标签“总计”出现在交叉表查询结果的底部,但还没有实际总计。
  • 单击总计标签右侧的空单元格。
  • 出现了一个箭头,我选择了“Sum”。

[我正在使用 Access 2013]

于 2017-08-01T17:43:28.467 回答
0

经过多次尝试和错误发现...

要在输入表单或子表单时打开总计行,您可以在表单代码中添加以下 VBA:

Private Sub YourFormName_Enter()
    If Application.CommandBars.GetPressedMso("RecordsTotals") = False Then
        Application.CommandBars.ExecuteMso "RecordsTotals"
    End If
End Sub
于 2021-01-25T22:28:23.187 回答