具有多个数据源的Crystal Report中的NOT IN场景

时间:2016-05-18 06:11:55

标签: sql crystal-reports select-query

我需要为我的Crystal Report做以下选择:

Select * from Table1 where ID not in (select ID from Table2 where mydate = @param)

并使事情变得更加复杂表1&表2位于两个不同的服务器上(一个是Access,一个是不同机器上的SQL)。

我尝试了几件事,但似乎无法获得正确的记录。我尝试过使用左连接,但当然我无法过滤日期。有什么想法可以实现吗?

提前谢谢

3 个答案:

答案 0 :(得分:0)

您可能需要为每个字段创建公式:

@字段1

如果Table1.ID!= Table2.ID

然后

Table1.Field1

答案 1 :(得分:0)

好的,因为你只有2个数据源试试这个:

在主报告中获取主报告和一个子报告

主要报告:

此查询应在主报告中使用

select ID from Table2 where mydate = @param

创建参数并检索主报告中的值。

现在进行子报告

子报告:

子报告应使用此查询:

Select * from Table1 

现在记录选择子报告写这个

ID not in ({?pm-ID})

pm-ID}是您通过子报告链接从主报告传递到子报告的值

现在,您可以根据需要在报告中显示数据

答案 2 :(得分:0)

除非我遗漏某些内容(完全可能),否则使用左连接应该可行。

对于此图示,我使用两个SQL命令,table1中的记录不在table2中,表2中的记录不在table1中。

仅当table2为null,或者table2为null且table2.Date不等于参数

时,才返回记录

当@param =' 20160303'时,我们从table1或table2看不到该记录。 (ID 55) enter image description here

数据集示例: enter image description here

加入:

enter image description here

RecordSelect公式 enter image description here

总结:使用公共列上的左连接设置数据源。 创建日期参数 使用报告>选择导出>记录并输入以下公式

isnull({Table2.date})or {Table2.date} <> {?date}

如果您使用的是日期范围,则可能需要重新格式化not equal to @param部分