2012-05-11 2 views
1

の範囲を経由して、レコードを選択し、私は以下の表を単純化しています:表中のクリスタルレポート - 私は、トランザクションテーブルを照会しているレポートを持っているテキスト

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​​、があります。これらはvarcharのとして格納されています。

私はクエリを制限するカテゴリのリストがありますが、これをテキストの範囲に限定する方法が見つかりません。 は、これまで私が試してみました:

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

AND 

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

どちらも任意の結果を返しています。

範囲が100以上の項目があるため、何千もの行が必要な場合があるため、大きなORリストを使用することはできません。

誰でも可能な場合はCatagoriesインデックスを活用する代替手段を提供することはできますか、上記のどちらの記述も機能しない理由を教えてください。

答えて

1

まず、Crystalが"5" in "1" to "10"のようなステートメントを評価するとは信用できません。私はこれらの比較の根拠を知らないが、それはそれが先行する数字のascii値などに基づいていると推測するだろう。

二重に変換すると、になるはずです work ... 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

これの欠点はクリスタルで処理されるようにWHERE句にこれを追加していないということですSQL Serverでは、代わりにローカルマシン上で選択を行います。そのパフォーマンスヒットを回避するには、文字列から数値への変換を行うCrystalでSQL式を作成することができます。私は試してみて、それを私のクリスタルコードスニペットを変換するつもりはないので、TSQLを使用しませんが、SQL式を作成した場合、{%はConvertCAT1ToNumericは}あなたは自分の選択式でこれを使用することもできます

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

幸運。

+0

最終的には、テストのおかげで問題が見つかりました。これは、括弧付きの基本的な書式設定エラーで、 'Cdbl IN Range'メソッドが現在動作しています。 – bendataclear

0

これを試してください。

は、それはあなたが「124」の範囲で ** {} NL_Trans.NT_CAT1を探しているかもしれない...基準タイプの一つに「125」 **と

とです** thoose行を削除しますこれを選択条件に入れるだけですが、まず数値範囲の数式に別の項目を選択し、数式全体をコピーして新しい条件を作成してみてください。適切なフィールドに名前を変更してレポートを実行します。

元(あなたがやった第一ダミー基準を削除することを忘れていけない):(125から124、IN CDBL({NL_Trans.NT_CAT1})) )を

私は、これは数字 (CDBLをレンジに式だと思います({NL_Trans.NT_CAT1})124から125まで)

関連する問題