SQL选择包含子特定值的父级

时间:2012-04-20 22:00:27

标签: sql crystal-reports

我实际上正在创建一个水晶报告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'的子记录。

感谢您的帮助

3 个答案:

答案 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'