【问题标题】:Select a group of records based on one record in the group根据组中的一条记录选择一组记录
【发布时间】:2011-02-24 14:51:58
【问题描述】:

我似乎非常纠结​​于一个问题。我使用 Crystal Reports 2008 从 MS-SQL 数据库中提取记录列表。涉及两个表(它们包含订阅者的订单数据)。第一个表是 OrderMst,第二个表是 OrderDtl。它们由两个字段连接,帐户和子编号。每个 Account 有很多 SubNumber,每个 SubNumber 有很多 InvoiceNumber。每个发票行都有一个列,告诉我它是否是最近的发票。我需要查看此记录以确定客户是否处于活动状态、已取消或已过期。然后,根据他们的状态,我需要选择该子编号的所有发票。我一直在努力想办法做到这一点。

这是一个例子:

OrderMst:

Account     SubNumber Pub
72781651    0025      NAVL
72781651    0012      RYIR
72781651    0001      RHCS
80156287    0015      VGFA
80156287    0012      NAVL

OrderDtl:

Account     SubNumber InvoiceNumber PubStatus RenewalThere
72781651    0025      15894578      A         0
72781651    0025      15754897      R         1
72781651    0025      15753412      R         1
72781651    0012      15753357      C         0
72781651    0012      15749875      R         1
72781651    0001      15465874      X         0
72781651    0001      15425789      R         1
80156287    0015      15656738      A         0
80156287    0012      15387956      C         0
80156287    0012      15324568      R         1

因此,如果我要查找有效订阅的所有发票的计数,我会选择 {OrderDtl.RenewalThere} = 0,我的报告结果将显示帐户 72781651 子编号 0025 有 3 个发票,帐户 80156287 子编号 0015 有 1 个发票。这就是我卡住的地方。我需要使用一个发票级别记录来告诉我我想要哪个订阅,然后获取该发票的所有发票级别记录。有什么想法吗?

【问题讨论】:

    标签: sql crystal-reports-2008


    【解决方案1】:

    你想要的是一个半连接:

    SELECT Account, SubNumber, COUNT(*)
      FROM OrderDtl
     WHERE EXISTS (
       SELECT *
         FROM OrderDtl AS a
        WHERE a.Account = OrderDtl.Account
          AND a.SubNumber = OrderDtl.SubNumber
          AND a.PubStatus = 'A'
          AND a.RenewalThere = 0
    )
    GROUP BY Account, SubNumber
    

    HTH

    【讨论】:

    • 这就像一个魅力......谢谢!不过我还有一个问题。我将继续选择已取消的客户。一切都一样,除了,我只想选择取消日期后 5 年内的发票。发票日期存在于每一行,取消日期仅存在于最近的发票上(RenewalThere = 0)。有什么想法吗?
    • 粗略猜测,因为我手头没有桌子,所以应该像将 a.PubStatus = 'A' 更改为 a.PubStatus = 'C' 一样简单(假设 C 代表取消)并添加一个标准,例如:AND a.CancelDate = DATEADD(Year, -5, OrderDtl.InvoiceDate)”;如果可以,则添加一个 OR 以使用这两个条件)。
    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多