【问题标题】:Supressing section in Crystal Reports with subreport使用子报表抑制 Crystal Reports 中的部分
【发布时间】:2009-08-07 20:29:43
【问题描述】:

我正在尝试根据这个 sql 查询在水晶报表 11 中创建一个报表

选择 *
FROM(表)OM,(表)OL,(表)C
WHERE OM.ORDER = OL.ORDER
AND OM.COMPANY = C.COMPANY
AND (存在 (选择 *
FROM(表)OSD,(表)OSDD
OSD.ORDER = OL.ORDER
和 OSD.LINE = OL.LINE
和 OSD.REVISION = OL.REVISION
和 OSD.DIM = OSDD.DIM
和 OSDD.SHAPE = OL.SHAPE))

我认为最好的开始方法是使用前两个表创建主报表,并使用查询的“EXISTS”部分创建子报表并链接回主报表。

我的详细信息部分包含主报告和子报告中的数据。对于子报表返回值的位置,我得到了正确的结果,但是如果子报表为空,我希望能够抑制主报表的详细信息部分,但是我找不到在任何一个中引用子报表的方法选择公式。

如果还有更好的方法来模拟此查询,我愿意接受建议。

【问题讨论】:

    标签: crystal-reports subreport suppress


    【解决方案1】:

    如果您不想看到子报表为空的任何数据,则没有理由使用子报表。您使报告过于复杂。

    如果您仍想这样做,Suppress 属性允许使用表达式。您可能必须使用 globalvar 变量,根据子报表设置变量,但我怀疑它会在显示行之前设置。

    【讨论】:

    • 我怀疑我让它变得比需要的更困难,但我假设根据子报告压制它会很简单。全局变量的想法很有希望,但我决定按照您的第一个建议进行简化。
    【解决方案2】:

    我不确定你使用的是什么类型的数据库,但我相信你可能可以使用类似的东西:

    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 的建议在部分专家中使用他抑制公式。

    希望这会有所帮助。

    【讨论】:

    • 既然这行得通,那么赞成和接受的答案怎么样? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多