2009-08-07 71 views
0

我想創建水晶報表報告報告基於此SQL查詢Supressing部分與報表

SELECT *
      FROM(表)OM,(表)OL(表11 )C
        WHERE OM.ORDER = OL.ORDER
        AND OM.COMPANY = C.COMPANY
        AND(EXISTS(SELECT *
                        FROM(表)OSD,(表)OSDD
                        WHERE OSD .ORDER = OL.ORDER
                      AND OSD.LINE = OL.LINE
                        AND OSD.REVISION = OL.REVISION
                       和OSD.DIM = OSDD.DIM
                       和OSDD.SHAPE = OL.SHAPE))

我認爲最好的方式開始通過使用前兩個表創建主報告並使用查詢的「EXISTS」部分創建一個子報告並鏈接回主報告。

我的詳細信息部分包含主報告和子報告中的數據。我得到正確的結果返回子報表返回值的位置,但我希望能夠抑制主報表的詳細信息部分,如果子報表爲空,但我無法找到一種方法來引用子報表的任何選擇公式。

如果還有更好的方法來模擬這個查詢,我願意提供建議。

回答

0

我不知道,如果什麼類型的你正在使用的數據庫,但我相信,你大概可以使用類似:

select * --you probably should narrow this down instead of using a * 
from (table) OM 
inner join (table) OL on OM.ORDER = OL.ORDER 
inner join (table) C on OM.COMPANY = C.COMPANY 
inner join (table) OSD on OSD.ORDER = OL.ORDER 
    and OSD.LINE = OL.LINE 
    and OSD.REVISION = OL.REVISION 
    and OSD.DIM = OSDD.DIM 
inner join (table) OSDD on OSDD.SHAPE = OL.SHAPE 

這是把我的頭頂部,而不是測試,而是想法是它會顯示來自OM,OL,C,OSD和OSDD的所有匹配記錄。由於您沒有在OSD或OSDD上使用左連接,因此您不應該有任何空行。

但是你總是可以改變那些左外連接,如:

select * --you probably should narrow this down instead of using a * 
from (table) OM 
inner join (table) OL on OM.ORDER = OL.ORDER 
inner join (table) C on OM.COMPANY = C.COMPANY 
left outer join (table) OSD on OSD.ORDER = OL.ORDER 
    and OSD.LINE = OL.LINE 
    and OSD.REVISION = OL.REVISION 
    and OSD.DIM = OSDD.DIM 
left outer join (table) OSDD on OSDD.SHAPE = OL.SHAPE 

這將使你從OM,OL,和C都行,只有行從OSD和OSDD它找到了一個匹配。然後,您有許多選項可以抑制不希望看到的行,例如在rexem建議的章節專家中使用抑制公式。

希望這會有所幫助。

+0

這工作得好多了。謝謝。 – Bryan 2009-08-10 15:16:38

+0

從這個工作起,積分和接受的答案如何? :) – Dusty 2009-08-10 16:13:00

1

如果您不希望在子報表爲空的情況下查看任何數據,則沒有理由使用子報表。你過於複雜的報告。

如果您仍想這樣做,則Suppress屬性允許使用表達式。您可能必須使用globalvar變量,根據子報表設置變量,但我懷疑它將在顯示行之前設置。

+0

我懷疑我是讓它比需要更困難,但我認爲這將是簡單的壓制基於子報表。全球變量的想法是有前途的,但我決定遵循你的第一個建議並簡化。 – Bryan 2009-08-10 15:15:26

+0

記住我的回答是答案嗎? – 2009-08-10 17:37:36