2012-04-20 36 views
3

我實際上正在創建一個Crystal Reports v12(2008)報告,但無法找到使用Crystal提取以下內容的方法。我想如果有人可能用SQL語言回答,我可以把它拼湊在一起。用於選擇包含子特定值的父代的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'的子記錄。

感謝您的幫助

回答

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' 

Andomar使得約出現如果每個組超過1個記錄具有2的狀態,如果是這樣的話重複記錄的有效點,你既可以按主鍵和在組頁腳級別顯示行信息,或者在選擇公式中使用帶有子查詢的sql表達式,而不是雙聯接方法。

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

然後記錄選擇專家:{%sqlexpression} > 0

+0

偉大的回覆,你有我的解決方案。我沒有很多結果,所以我不會擔心如何糾正Andomar的發現。我確實得到了他所描述的結果。 – macunte 2012-04-21 02:45:54

+0

這怎麼可能? dd2別名甚至沒有加入第二次連接。 – xQbert 2012-04-22 01:05:28

+0

@xQbert晶體使用圖形設計器 - 我包括的SQL只是水晶將如何翻譯它的一個例子:)我已經改正了錯字 – 2012-04-22 12:23:13

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

和不同的方式來獲得同樣的...

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' 
+3

如果每個'hbmast'多個'ddmast'這將創造大量重複行的。莫斯蒂的'在...在'解決方案似乎更好 – Andomar 2012-04-20 22:25:34

相關問題