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