繁体   English   中英

Crystal Reports-通过文本范围选择记录

[英]Crystal Reports - Select records via range of text

我有一个查询交易表的报告,我简化了下表:

CREATE TABLE [dbo].[NL_Trans](
    [NT_PRIMARY] [int] NOT NULL,
    [NT_CODE] [varchar][20] NOT NULL,
    [NT_CAT1] [varchar](6) NOT NULL,
    [NT_CAT2] [varchar](6) NOT NULL,
)

表中的数据如下:

NT_PRIMARY -- NT_CODE --- NT_CAT1 --- NT_CAT2
---------------------------------------------
      1       AB100         123         234
      2       AB200         124         234
      3       AB300         125         235
      4       AB400         126         235

该表具有数年的数据,并具有8个NT_CAT字段, 这些是存储为varchar的数字

我有大量的类别将查询限制在其中,但是我找不到将其限制在文本范围内的方法。 到目前为止,我已经尝试过:

{NL_Trans.NT_CAT1} IN "124" to "125"

AND

(CDbl ({NL_Trans.NT_CAT1}) IN 124 to 125))

两者均未返回任何结果。

我不能使用大量的OR语句,因为在某些情况下范围超过100个项目,这意味着我需要数千行。

任何人都可以给出一个可行的替代方法(如果可能的话,利用Catagories索引),或者告诉我为什么以上任何一个语句都不起作用?

首先,您不能信任Crystal来评估"5" in "1" to "10"类的语句。 我不知道这些比较的基础,但我想它是基于前导数字的ascii值或类似的东西。

话虽如此,转换为双精度字体应该可以工作... NT_CAT字段中是否可能包含非数字字符? 您应该在记录选择公式中尝试类似的方法,看看是否有更好的运气:

if not(isnull({NL_TRANS.NT_CAT1})) and isnumeric({NL_TRANS.NT_CAT1}) then cdbl({NL_TRANS.NT_CAT1}) in 124 to 125

不利的一面是,Crystal不会将其添加到要在SQL Server上处理的WHERE子句中,而是会在本地计算机上进行选择。 为了避免性能下降,您可以在Crystal中创建一个SQL表达式,该表达式将为您执行字符串到数字的转换。 我不使用TSQL,所以我不会尝试将Crystal代码片段转换为它,但是如果您创建了SQL表达式{%ConvertCAT1ToNumeric},则可以在选择公式中使用它:

not(isnull({%ConvertCAT1ToNumeric})) and {%ConvertCAT1ToNumeric} in 124 to 125

祝好运。

尝试这个。

删除标准类型之一的管形线**。您可能正在寻找** {NL_Trans.NT_CAT1} IN“ 124”至“ 125”范围内的** AND

并将其仅作为选择标准,但首先,请尝试为数字范围公式选择其他字段,复制整个公式并创建一个新条件。 将字段重命名为适当的字段并运行报告。 (不要忘记删除您执行的第一个虚拟条件)

原始:(CDbl({NL_Trans.NT_CAT1})IN 124至125))

我认为这是范围数字(124至125之间的CDbl({NL_Trans.NT_CAT1}))的公式)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM