根据组中的一条记录选择一组记录

时间:2011-02-24 04:17:08

标签: sql crystal-reports-2008

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

以下是一个例子:

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张发票。这就是我被困住的地方。我需要使用一个发票级别记录来告诉我我想要的订阅,然后获取该发票的所有发票级别记录。有什么想法吗?

1 个答案:

答案 0 :(得分: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