0

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

这是一个例子:

订单号:

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

订单号:

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,我的报告结果将显示 Account 72781651 SubNumber 0025 有 3 张发票,Account 80156287 SubNumber 0015 有 1 张发票。这就是我卡住的地方。我需要使用一个发票级别记录来告诉我我想要哪个订阅,然后获取该发票的所有发票级别记录。有任何想法吗?

4

1 回答 1

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

高温高压

于 2011-02-24T06:51:58.323 回答