【问题标题】:Sorting a grouped report对分组报告进行排序
【发布时间】:2013-06-18 14:16:39
【问题描述】:

我的架构看起来有点像这样:

SEQ  GROUP1  GROUP2  GROUP3  VALUE

SEQ 大致相当于行号——它实际上是来自外部表的排序顺序——而GROUPx 字段进一步描述了数据。所以,例如:

SEQ  GROUP1  GROUP2  GROUP3  VALUE
---- ------- ------- ------- ------
1    A       A       A       123
2    A       A       A       456
3    A       B       C       foo
5    X       Y       Z       bar
4    A       B       D       baz

我希望这些数据按此层次结构分组,但按SEQ 排序。因此,上述数据会生成如下报告:

A
  A
    A
      123
      456
  B
    C
      foo
    D
      baz
X
  Y
    Z
      bar

我一直在玩报告的“分组和排序”选项,我似乎可以让它排序但不分组,或分组但不排序!

例如,如果我指定:

  • 按GROUP1分组
    • 按GROUP2分组
      • 按GROUP3分组
        • 通过SEQ订购

分组级别字段中的值决定了数据的输出顺序。 (在这种情况下,我选择的名称无论如何都是按字母顺序排列的,但是如果我将GROUP1 中的X 的名称更改为123,它将出现在报告的顶部。)

如果我把“Order by SEQ”移到最高优先级,顺序是正确的,但是分组级别被破坏:Access 基本上将SEQ 字段视为分组级别,然后重复后续层次结构对于该组中的每个值。

有没有什么方法可以实现我正在寻找的东西,而无需为每个 GROUPx 字段(而不是我当前的“全局”SEQ)设置一个 SEQx 字段?

【问题讨论】:

    标签: sorting ms-access report grouping


    【解决方案1】:

    我认为您将不得不对此进行左连接。首先,只使用 SEQ 创建一个查询,并按 SEQ 排序。然后将您的分组查询和左连接到您的第一个查询,以便它保持正确的顺序。有道理?

    您的查询代码或多或少应该是:

    SELECT 
    First(B.SEQ) AS FirstOfSEQ, tblTest.Group1, tblTest.Group2, tblTest.Group3, tblTest.Val AS Val2 FROM (SELECT tblTest.SEQ FROM tblTest ORDER BY tblTest.SEQ) AS B 
    LEFT JOIN tblTest ON B.SEQ = tblTest.SEQ 
    GROUP BY tblTest.Group1, tblTest.Group2, tblTest.Group3, tblTest.Val 
    ORDER BY First(B.SEQ); 
    

    在报表布局中,按 SEQ 排序,然后按其他值分组,您应该会得到所需的内容。

    【讨论】:

    • n.b.,Access 报告中的“分组依据”与 SQL GROUP BY 子句不同。对微软来说,这是一个糟糕的选择。也许“Arrange by”或“Head by”会更好......
    • ...我的意思是您的解决方案不相关。但是,非常感谢,所以谢谢你:)
    • 这绝对对我有用:SELECT First(B.SEQ) AS FirstOfSEQ, tblTest.Group1, tblTest.Group2, tblTest.Group3, tblTest.Val AS Val2 FROM (SELECT tblTest.SEQ FROM tblTest ORDER BY tblTest.SEQ) AS B LEFT JOIN tblTest ON B.SEQ = tblTest.SEQ GROUP BY tblTest.Group1, tblTest.Group2, tblTest.Group3, tblTest.Val ORDER BY First(B.SEQ);在报表布局中,按 SEQ 排序,然后按其他值分组,您应该会得到所需的结果。
    • 在这种情况下,您可能希望使用此代码编辑您的原始答案,因为您的建议并不明显......我会用我的数据和回复你。
    • 糟糕!很抱歉混淆了。我编辑了原始答案,希望对您有所帮助!
    【解决方案2】:

    我自己解决了这个问题

    选择 TimeOffRequestID,您的姓名为“员工姓名”,替换(forwardcallsto,'Select One','Voicemail')为“转接电话”,约会为“评论”来自 dbo.nei_TimeOffRequest WHERE CAST(CONVERT(VARCHAR,GETDATE(),101) AS DATETIME) 在开始和结束之间 按你的名字订购 ASC

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      相关资源
      最近更新 更多