1

これは興味深いものです。非営利団体の資金調達データベースからのエクスポートに基づいて、Crystal XI レポートを書いています。エクスポートにより、レポートのデータ ソースとして使用される MDB ファイルが作成されます。

私のデータ ソースには、セミコロンで区切られた寄付勧誘者のリストを含むフィールドを持つ 3 つのテーブルがあります。これら 3 つのフィールドを組み合わせて、個別の名前の 1 つの列にする必要があります。このコマンドの結果は、フィルタリングとグループ化の両方に使用されます。これは、テーブルのセットアップと目的の出力です。

表1

ドウ、ジョン; ドウ、ジェーン。スミス、ボブ

表 2

スミス、ボブ

表 3

ドウ、ジョン; スミス、ボブ

これを組み合わせて作成する必要があります。

ドウ、ジョン・
ドウ、ジェーン・
スミス、ボブ

簡単ですよね?ただし、SELECT ステートメントのみを使用してこれを行う必要があります。なぜ聞くの?

  • MDB は実行ごとに上書きされます。これは、次のエクスポート実行時に削除されるため、UDF またはストアド プロシージャを MDB に追加するオプションがないことを意味します。
  • エンド ユーザーは Access をインストールしていないため、エクスポートとレポートの間のステップとしてオブジェクトを MDB に追加するためのスクリプトを作成したとしても、エンド ユーザーはそれを実行できませんでした。
  • Crystal の SQL コマンドは変数を宣言できないので、BEGIN と END の間で処理が行われるカーソルや何かを書くことはできません。
  • データ ソースを生成するプロセスを制御できないため、そこで修正することはできません。

これらの制限内でこれを達成できるかどうかはわかりませんが、具体的です。別のデータベースにUDFを保存し、関数を活用できるようにSQLコマンドをクロスデータベースクエリとして実行する実験をほぼ行っていますが、CrystalのSQLコマンドがクロスデータベースを処理できるかどうかはわかりません.データベースクエリ。

これらの制限内で、解決策のアイデアはありますか?

4

1 に答える 1

0

Command を使用すると、3 つのレコードセットを組み合わせることができます。

SELECT NAME_FIELD
FROM   TABLE_1

-- eliminate duplications
UNION

SELECT NAME_FIELD
FROM   TABLE_2

UNION

SELECT NAME_FIELD
FROM   TABLE_3

次に、値を配列に分割する数式を作成できます。

//{@names}
Stringvar Array names;
Split({Command.NAME_FIELD}), ";");
true;

残念ながら、この数式を使用して配列を「行」に変換することはできません。Crystal はこれをサポートしていません。本質的に、あなたは「行き止まり」にいます。

最良のオプション (要件が与えられた 1 つのみ) は、ソース システム (つまり、MDB ファイルを作成するシステム) でフィールドの値を同等のレコードセットに分割することです。これには、ソース システムでストアド プロシージャまたはユーザー定義関数のいずれかを作成する必要があります。Oracle を使用している場合は、「Oracle で複数の行をカンマ区切りのリストに結合するにはどうすればよいですか?」を参照してください。.

于 2012-05-14T13:28:32.590 に答える