3

我实际上正在创建一个 Crystal 报告 v12 (2008) 报告,但找不到使用 Crystal 提取以下内容的方法。我想如果有人可以用 SQL 语言回答,我可以把它拼凑起来。

2 个表:hbmast、ddmast

SELECT hbmast.custno, hbmast.id, ddmast.name, ddmast.status
WHERE hbmast.custno = ddmast.custno
GROUP BY hbmast.id
pseudo code::show all hbmast values that have ddmast.status = '2'

样本输出:

J0001, 111222, PAUL JONES, 1
       111222, PAUL JONES, 2
       111222, PAUL JONES, 1

K0001, 555333, PETER KING, 3
       555333, PETER KING, 1

我想让 Paul 在报告中显示所有子记录,但不应在报告中返回 Peter,因为他没有 ddmast.status 字段的“2”子记录。

谢谢您的帮助

4

3 回答 3

4

我想你正在寻找这个:

select hb.custno, hb.id, dd.name, dd.status from hbmast hb
join ddmast dd on hb.custno = dd.custno
where hb.custno in (
    select custno from ddmast
    where status = '2'
)

让我知道这是否会返回您的预期结果。

于 2012-04-20T22:06:35.197 回答
2

在 Crystal 中实现这一点的方法是让你的 hb 和 dd 表然后是 dd 表的第二个别名。

因此,您将过滤您的 dd 别名表,其中 status = 2 然后加入您的 hb 表并返回您的 dd 表(不是别名)。SQL 最终看起来像:

select hb.custno, hb.id, dd.name, dd.status from hbmast hb
inner join ddmast dd on hb.custno = dd.custno
inner join ddmast dd2 on hb.custno = dd2.custno
where dd2.status = '2'

如果每个组有超过 1 条状态为 2 的记录,Andomar 就出现重复记录提出了一个有效的观点。如果是这种情况,您可以按主键分组并在组页脚级别显示行信息,或者使用 sql 表达式选择公式中的子查询,而不是双连接方法。

SQL 表达式:(select count(*) from ddmast where custno = "hbmast.custno" and status = '2')

然后记录选择专家:{%sqlexpression} > 0

于 2012-04-20T22:16:24.253 回答
1

以及获得相同结果的不同方法...

SELECT hb.custno, hb.id, dd.name, dd.status 
FROM hbmast hb
INNER join ddmast dd 
  on hb.custno = dd.custno
INNER JOIN DDMAST2 DD2 
  on DD2.custNo = HB.custNo 
  AND DD2.Status='2'
于 2012-04-20T22:14:57.303 回答