SQL Convert(varchar, <fieldname>) 等价于 Crystal 报表记录选择公式
SQL Convert(varchar, <fieldname>) equivalent in Crystal Reports record selection formula
我有一个 sql 查询 where
子句,如下所示:
WHERE ("Table1"."count"<>"Table1"."onhand"
OR "Table2"."batch_code" IS NOT NULL
OR ("Table1"."BatchMinVariance"<>0 OR "Table1"."BatchMaxVariance"<>0)
)
我在我的代码中使用 crystal 等价于上面的方法即时设置记录选择:
({Table1.count} <> {Table1.onhand}
or (not isnull({Table2.batch_code})
or ({Table1.BatchMinVariance} <> 0 OR {Table1.BatchMaxVariance} <> 0) )
这工作得很好,crystal 处理它显示正确的结果。
需求是在WHERE
子句中添加另一个条件如下:第4行是新条件。
WHERE
("Table1"."count"<>"Table1"."onhand"
OR "Table2"."batch_code" IS NOT NULL
OR ("Table1"."BatchMinVariance"<>0 OR "Table1"."BatchMaxVariance"<>0)
OR (CONVERT(varchar, "Table3".in_snapshot_yn) + CONVERT(varchar, "Table3".counted_yn) IN ('01', '10'))
)
注意条件 4 是新条件,我使用了 sql CONVERT 函数,因为它们是布尔字段,因此只显示值为 01 或10. sql 查询给了我预期的结果,但我正在修复以找到与此条件等效的 Crystal。
对于条件 4,我尝试了:
OR (TOTEXT(TONumber({Table3.in_snapshot_yn}), 0)&""&TOTEXT(TONumber({STAKE_SERIALNO.counted_yn}), 0) IN ("01, 11") <> true)
我已经在报告中对此进行了测试,以查看 crystal 是否喜欢并且 crystal 不会抱怨。但是当我把它作为条件 4 放在我的代码中时,我不会喜欢它。给出一个缺少括号 ) 的蹩脚错误。我知道这不是括号问题,绝对与条件有关。
完整的 CR 等效条件如下所示:
({TABLE1.count} <> {TABLE1.onhand}
OR (not isnull({Table2.batch_code})
OR ({TABLE1.BatchMinVariance} <> 0 OR {TABLE1.BatchMaxVariance} <> 0) )
OR NOT (TOTEXT(TONumber({Table3.in_snapshot_yn}), 0)&""&TOTEXT(TONumber({Table3.counted_yn}), 0) IN ("01, 11")) )
如有任何提示,我们将不胜感激。我正在使用 SQL Server 2014 和 CR 13。
您应该创建一个 SQL表达式。 SQL表达式将具有与数据库语法相同的语法,主要优点是它将在服务器上执行。您可以将其添加到记录选择公式中。如果您使用 Crystal 函数,所有记录都将在本地下载和过滤。如果您使用 SQL 表达式 Crystal 将能够生成一个 WHERE 子句并将其发送到服务器,因此下载到您的计算机的记录数将会少得多。
我找到了。我的新条件 "double quotes" 有问题。
TOTEXT(TONumber({Table3.in_snapshot_yn}), 0)&""&TOTEXT(TONumber({Table3.counted_yn}), 0) IN ("01, 11")
一旦我将它们更改为单引号,它就可以正常工作。我不知道为什么它会这样做。我所说的记录选择在报告中做得很好,所以我在 Crystal.
中没有庞大的数据集
请参阅下面完整的 crystal 等效记录选择。
({TABLE1.count} <> {TABLE1.onhand}
OR (not isnull({Table2.batch_code})
OR ({TABLE1.BatchMinVariance} <> 0 OR {TABLE1.BatchMaxVariance} <> 0) )
OR NOT (TOTEXT(TONumber({Table3.in_snapshot_yn}), 0)&''&TOTEXT(TONumber({Table3.counted_yn}), 0) IN ('01, 11')) )
回答到此结束。
对于用户@Lan.. 为了以防万一你需要知道我是如何在 c# 中做到这一点的,我已经粘贴了下面的代码。
var recordSelection = new List<string>();
recordSelection.Add(<crystal equivalent where clause as above>);
reportDocument.RecordSelectionFormula(recordSelection);
// FYI reportDocument is initialised like this ReportDocument reportDocument;
我有一个 sql 查询 where
子句,如下所示:
WHERE ("Table1"."count"<>"Table1"."onhand"
OR "Table2"."batch_code" IS NOT NULL
OR ("Table1"."BatchMinVariance"<>0 OR "Table1"."BatchMaxVariance"<>0)
)
我在我的代码中使用 crystal 等价于上面的方法即时设置记录选择:
({Table1.count} <> {Table1.onhand}
or (not isnull({Table2.batch_code})
or ({Table1.BatchMinVariance} <> 0 OR {Table1.BatchMaxVariance} <> 0) )
这工作得很好,crystal 处理它显示正确的结果。
需求是在WHERE
子句中添加另一个条件如下:第4行是新条件。
WHERE
("Table1"."count"<>"Table1"."onhand"
OR "Table2"."batch_code" IS NOT NULL
OR ("Table1"."BatchMinVariance"<>0 OR "Table1"."BatchMaxVariance"<>0)
OR (CONVERT(varchar, "Table3".in_snapshot_yn) + CONVERT(varchar, "Table3".counted_yn) IN ('01', '10'))
)
注意条件 4 是新条件,我使用了 sql CONVERT 函数,因为它们是布尔字段,因此只显示值为 01 或10. sql 查询给了我预期的结果,但我正在修复以找到与此条件等效的 Crystal。 对于条件 4,我尝试了:
OR (TOTEXT(TONumber({Table3.in_snapshot_yn}), 0)&""&TOTEXT(TONumber({STAKE_SERIALNO.counted_yn}), 0) IN ("01, 11") <> true)
我已经在报告中对此进行了测试,以查看 crystal 是否喜欢并且 crystal 不会抱怨。但是当我把它作为条件 4 放在我的代码中时,我不会喜欢它。给出一个缺少括号 ) 的蹩脚错误。我知道这不是括号问题,绝对与条件有关。
完整的 CR 等效条件如下所示:
({TABLE1.count} <> {TABLE1.onhand}
OR (not isnull({Table2.batch_code})
OR ({TABLE1.BatchMinVariance} <> 0 OR {TABLE1.BatchMaxVariance} <> 0) )
OR NOT (TOTEXT(TONumber({Table3.in_snapshot_yn}), 0)&""&TOTEXT(TONumber({Table3.counted_yn}), 0) IN ("01, 11")) )
如有任何提示,我们将不胜感激。我正在使用 SQL Server 2014 和 CR 13。
您应该创建一个 SQL表达式。 SQL表达式将具有与数据库语法相同的语法,主要优点是它将在服务器上执行。您可以将其添加到记录选择公式中。如果您使用 Crystal 函数,所有记录都将在本地下载和过滤。如果您使用 SQL 表达式 Crystal 将能够生成一个 WHERE 子句并将其发送到服务器,因此下载到您的计算机的记录数将会少得多。
我找到了。我的新条件 "double quotes" 有问题。
TOTEXT(TONumber({Table3.in_snapshot_yn}), 0)&""&TOTEXT(TONumber({Table3.counted_yn}), 0) IN ("01, 11")
一旦我将它们更改为单引号,它就可以正常工作。我不知道为什么它会这样做。我所说的记录选择在报告中做得很好,所以我在 Crystal.
中没有庞大的数据集请参阅下面完整的 crystal 等效记录选择。
({TABLE1.count} <> {TABLE1.onhand}
OR (not isnull({Table2.batch_code})
OR ({TABLE1.BatchMinVariance} <> 0 OR {TABLE1.BatchMaxVariance} <> 0) )
OR NOT (TOTEXT(TONumber({Table3.in_snapshot_yn}), 0)&''&TOTEXT(TONumber({Table3.counted_yn}), 0) IN ('01, 11')) )
回答到此结束。
对于用户@Lan.. 为了以防万一你需要知道我是如何在 c# 中做到这一点的,我已经粘贴了下面的代码。
var recordSelection = new List<string>();
recordSelection.Add(<crystal equivalent where clause as above>);
reportDocument.RecordSelectionFormula(recordSelection);
// FYI reportDocument is initialised like this ReportDocument reportDocument;