对分组报告进行排序

时间:2013-06-18 14:16:40

标签: sorting ms-access report grouping

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

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
        • 排序

分组级别字段中的值确定数据的输出顺序。 (在这种情况下,我选择的名称仍然按字母顺序排列,但如果我将XGROUP1的名称更改为123,则它会显示在顶部报告。)

如果我将“按SEQ排序”移至最高优先级,则订单正确,但分组级别已损坏:Access基本上将SEQ字段视为分组级别,然后是对该组中的每个值重复后续层次结构。

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

2 个答案:

答案 0 :(得分:0)

我认为你将不得不做这个左联。首先,仅使用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排序,然后按其他值对其进行分组,您应该得到所需的内容。

答案 1 :(得分:-1)

我自己解决了这个问题

选择TimeOffRequestID,yourname AS“Employee Name”,Replace(forwardcallsto,'Select One','Voicemail')AS“Forward Calls To”,约会AS“Comments”FROM dbo.nei_TimeOffRequest WHERE CAST(CONVERT(VARCHAR,GETDATE(),101)AS DATETIME)在起始和结尾之间 按您的名字ASC命令