【问题标题】:Ms Access 2007 - Can sort or group report but not both, can't figure out whyMs Access 2007 - 可以对报告进行排序或分组,但不能同时进行,不知道为什么
【发布时间】:2013-10-01 19:52:56
【问题描述】:

我很困惑,希望能在这里得到一些帮助。我有一个从两个表中提取信息的查询和一个读取它的报告。我的两张表是这样的:其中一张是包含电话号码、姓名和地址的联系人列表。另一张表是付费历史。 PhoneNumber 字段是它们之间的联系方式。 Contact 表中没有重复条目,但另一个表中每个电话号码有多个付费实例。

我的报告将它们按电话号码分组,但我还需要它按日期排序。我的日期字段被标记为时间/日期,它在付费表中。我遇到的问题是我可以在电话号码上分组或在日期字段上排序,但不能同时进行。当我将 Group 设置为顶层时,它会忽略我在其下方设置的 Sort。如果我进行排序并将其向上拖动以使其成为顶级,它将不会分组。当它没有分组时,我会留下相同联系信息的多个实例......就像我为它曾经支付的每个日期获得一个新列表一样,而我需要一个包含每个付费实例的单个联系人列表被分组在它下面。

这是我的查询 SQL:

SELECT 
    tblContributorsLead.FirstName, 
    tblContributorsLead.LastName, 
    tblContributorsLead.Address1, 
    tblContributorsLead.ZipCode, 
    tblContributorsLead.CityName, 
    tblPledgesLead.PledgeAmountRecd, 
    tblPledgesLead.DateRecd, 
    tblPledgesLead.PhoneNumber, 
    tblPledgesLead.DispositionTime, 
    tblPledgesLead.Agent, 
    tblPledgesLead.CampaignName, 
    tblPledgesLead.Custom20
FROM 
    tblContributorsLead 
    INNER JOIN 
    tblPledgesLead 
        ON tblContributorsLead.PhoneNumber = tblPledgesLead.PhoneNumber
WHERE 
    (((tblPledgesLead.PledgeAmountRecd)>0) 
        AND ((tblPledgesLead.DateRecd) Is Not Null));

为什么我只能进行分组或排序,而不能同时进行两者?

编辑:http://icloudbackups.com/stripped.zip 是我的数据库被剥离的副本。

【问题讨论】:

  • 因此您希望每个联系人的所有付款信息一起显示,但您希望联系人本身按其最近付款日期排序。对吗?
  • 正确。它需要根据他们最近的付款进行排序。
  • 报表的源查询没有点排序。报告自行排序。
  • 我没有在查询中进行任何排序。我只是过滤掉我不想要的结果。我不希望它拉出任何未付款的记录,也不想拉出没有收到日期的记录。这两种情况都需要涵盖,因为我们故意遇到没有付款历史的联系人的情况,并且我们也有付款为“0”但仍标记日期的情况,因此我们知道他们踢的日期出去。我不需要出现这些案例中的任何一个。
  • 如以下回复中所述,如果有帮助,我已经剥离了我的数据库。 icloudbackups.com/stripped.zip

标签: sorting ms-access ms-access-2007


【解决方案1】:

我想我现在明白了您想要什么 - 将最近日期的电话号码组显示在顶部。为此,您需要为每个 PhoneNumber 确定最后一个(或者如果您需要它,则为第一个)DateRecd

SELECT SortingAndGrouping.LastDate, SortingAndGrouping.PhoneNumber, tblPledgesLead.DateRecd
FROM (tblContributorsLead INNER JOIN tblPledgesLead ON 
  tblContributorsLead.PhoneNumber = tblPledgesLead.PhoneNumber) INNER JOIN 
  (SELECT CDate(Format(tblPledgesLead.DateRecd,"MM/DD/YYYY")) As LastDate, tblPledgesLead.PhoneNumber
    FROM tblContributorsLead INNER JOIN tblPledgesLead ON
      tblContributorsLead.PhoneNumber = tblPledgesLead.PhoneNumber
    ORDER BY tblPledgesLead.DateRecd DESC)  AS SortingAndGrouping ON
  tblContributorsLead.PhoneNumber = SortingAndGrouping.PhoneNumber
ORDER BY SortingAndGrouping.LastDate DESC , SortingAndGrouping.PhoneNumber, tblPledgesLead.DateRecd DESC;

您将需要添加要显示的其他字段(为了清楚起见,我在此处删除了它们),并让报告强制执行与我在此处相同的排序 - 为 LastDate 列创建一个组,然后为 PhoneNumber 创建一个组列,然后指定排序。

【讨论】:

  • 这样做并没有改变输出中的任何内容。
  • 你是在报告本身上做的吗?报告将覆盖源查询中的设置。
  • 正确。在这里,我设法剥离了我的数据库。 icloudbackups.com/stripped.zip
  • 我想我现在明白了...您想在详细信息中按第一个或最后一个日期对组进行排序。我已经修改了答案。
  • 这似乎没有任何效果。我在那里使用了您的 SQL,重新添加了我的字段,然后在报告中我为电话号码创建了一个组,并为 lastdate 创建了一个组,然后按 daterecd 排序。似乎没有任何变化。这是我精简数据库的更新版本:icloudbackups.com/stripped2.zip
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多