当前位置:  开发笔记 > 数据库 > 正文

有没有办法让Crystal Reports在连接条件中包含常量,而不使用SQL命令对象?

如何解决《有没有办法让CrystalReports在连接条件中包含常量,而不使用SQL命令对象?》经验,为你挑选了1个好方法。

我想要做的是对表的外连接,我在其中根据匹配常量从连接表中排除记录,但是保留主表中的记录.例如:

SELECT a.id, a.other, b.baz
FROM a
LEFT OUTER JOIN b
  ON a.id  = b.id
  AND b.bar = 'foo'

预期成绩:

    id  other       baz      
    --  ----------  -------  
    1   Has foo     Include  
    2   Has none    (null)   
    3   Has foobar  (null)   

将它置于过滤条件下,我无法得到相同的结果.如果我使用以下内容:

SELECT a.id, a.other, b.baz
FROM a
LEFT OUTER JOIN b
  ON a.id  = b.id
WHERE (b.bar IS NULL OR b.bar = 'foo')

我得到这些不正确的结果:

    id  other     baz      
    --  --------  -------  
    1   Has foo   Include  
    2   Has none  (null)   

如果它排除了恰好与B记录匹配的A记录,其中bar ='foobar'.我不希望这样,我希望A出现,但在这种情况下B为空.

表B将有多个需要排除的记录,所以我不认为我可以在Crystal端过滤这个,而不会进行大量的处理以避免来自表A的重复记录的问题.

我不能使用SQL命令对象,因为我们运行报告的第三方应用程序似乎阻塞了SQL命令对象.

我不能使用视图,因为我们的支持合同不允许数据库修改,我们的供应商考虑添加视图数据库修改.

我正在使用Crystal Reports XI,特别是版本11.0.0.895.如果它有所不同,我使用SQL-92 ODBC驱动程序运行Progress 9.1E04数据库.

可以使用以下内容创建示例中使用的示例表和数据:

CREATE TABLE a (id INTEGER, other VARCHAR(32));
CREATE TABLE b (id INTEGER, bar VARCHAR(32), baz VARCHAR(32));
insert into A (id, other) values ('1', 'Has foo');
insert into A (id, other) values ('2', 'Has none');
insert into A (id, other) values ('3', 'Has foobar');
insert into B (id, bar, baz) values ('1', 'foo', 'Include');
insert into B (id, bar, baz) values ('1', 'foobar', 'Exclude');
insert into B (id, bar, baz) values ('1', 'another', 'Exclude');
insert into B (id, bar, baz) values ('1', 'More', 'Exclude');
insert into B (id, bar, baz) values ('3', 'foobar', 'Exclude');

小智.. 7

Crystal报表无法基于其链接和报表选择条件生成常用的SQL语句.您必须使用"命令"或构建视图.

简而言之,Crystal很糟糕.



1> 小智..:

Crystal报表无法基于其链接和报表选择条件生成常用的SQL语句.您必须使用"命令"或构建视图.

简而言之,Crystal很糟糕.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有