我实际上正在创建一个水晶报告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
我希望保罗在报告中显示所有儿童记录,但彼得不应该返回报告,因为他没有ddmast.status字段为'2'的子记录。
感谢您的帮助
答案 0 :(得分: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'
)
如果这会返回您的预期结果,请告诉我。
答案 1 :(得分: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'
如果每个组的状态为2的记录超过1条,Andomar就会出现重复记录的有效点。如果是这种情况,您可以按主键分组并在组页脚级别显示行信息或使用sql表达式,在您的选择公式中使用子查询而不是双连接方法。
SQL表达式:(select count(*) from ddmast where custno = "hbmast.custno" and status = '2')
然后记录选择专家:{%sqlexpression} > 0
答案 2 :(得分: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'