0

VS2010 の Crystal Report XI に 3 つのテーブルがあり、シーンは次のとおりです。

POID でリンクされた 3 つのテーブル。

  • 表1
    • データ: 都市、日付、工場名、POID (例: 1001)
    • 各 POID には 1 つのレコードがあります
  • 表 2
    • データ: シェード名 (例: 青)、数量 (例: 123)、POID (例: 1001)
    • 各 POID には 1 つ以上のレコードがあります
  • 表 3
    • データ: スタイル番号 (例: 123)、バイヤーの PO 番号 (例: 123)、POID (例: 1001)
    • 各 POID には 1 つ以上のレコードがあります

表 2 と表 3 は独立しており、POID については表 1 のみに依存しています。問題は、表 2 と表 3 で POID のレコード数が異なる場合に始まります。

表 3 をレポートに追加する前に、表 1 の POID でレポートをグループ化し、表 2 のレコード情報をレポートの詳細セクションに配置しました。ただし、テーブル 3 のレコードを挿入したので、テーブル 2 とテーブル 3 のレコードは重複し続けます。

たとえば、POID = 1001 の場合、テーブル 1 レコードが 1 つ、テーブル 2 レコードが 3 つ、テーブル 3 レコードが 2 つ存在します。したがって、レポートの結果は、表 2 の各レコードが 2 回繰り返され、表 3 の各レコードが 3 回繰り返されることになります。

私は彼らに同じことを繰り返させたくありません。データベースにあるように表示したい。

C#、VS2010、および SQLExpress2008 を使用して、POID グループのすべてのテーブル データを使用しました。

これが明確であり、あなたが助けてくれることを願っています. 前もって感謝します。

注: 私はこの問題について多くの調査を行い、最終的にここで質問しました。

4

1 に答える 1

3

まず第一に、あなたはそのようなデータベースのクエリがどのように見えるかを誤解していると思います。実際には、結合を次のように設定した場合にデータベースクエリがビューに返す内容を正確に示していますSELECT * FROM TABLE1 CROSS JOIN TABLE2 ON TABLE1.POID = TABLE2.POID CROSS JOIN TABLE3 ON TABLE2.POID = TABLE3.POID。つまり、TABLE1レコードが1つ、TABLE2レコードが3つ、Table3レコードが2つある場合は、TABLE1を選択することになります。 6回記録し、各TABLE2は2回記録して合計6回、各TABLE3は3回記録して合計6回記録します。つまり、実際には6行が返されますが、レポートのレイアウト方法が原因で、レポートのすべてがFUBARになります。TABLE1レコードでのグループ化は、おそらくあなたが行った唯一の「正しい」ことです。

追加のデータベースオブジェクトを作成せずにこの問題を発生させずに処理する最も簡単な方法は、サブレポートだと思います。うまくいけば、これは理にかなっており、必要に応じて画像をまとめることができますが、やりたいことは次のとおりです。

  1. メインレポートで、メインデータベースオブジェクトをデータソースとして使用し、TABLE1でグループ化し、グループヘッダーまたはフッター(選択)内に2つのセクションを追加し、詳細セクションを完全に非表示にします。
  2. グループ化に追加した最初のサブセクションで、データソースとしてTABLE2のみを使用してサブレポートを追加し、グループ化を使用せず、TABLE2情報を詳細セクションに配置します。必要に応じて、追加のヘッダーと要約情報をレポートのヘッダーとフッターに追加します。
  3. グループ化に追加した2番目のサブセクションでは、データソースとしてTABLE3のみを使用してサブレポートを追加し、グループ化を使用せず、TABLE3情報を詳細セクションに配置します。必要に応じて、追加のヘッダーと要約情報をレポートのヘッダーとフッターに追加します。
  4. 必要なフッターに追加情報を追加します。

本質的には、次のようになります。

  • メインレポート-レポートヘッダー
  • メインレポート-ページヘッダー
  • メインレポート-グループ1ヘッダー
    • グループ1ヘッダー-セクションA-表1レコード情報
    • グループ1ヘッダー-セクションB-サブレポート1
      • サブレポート1-レポートヘッダー
      • サブレポート1-詳細-表2レコード情報
      • サブレポート1-レポートフッター
    • グループ1ヘッダー-セクションC-サブレポート2
      • サブレポート2-レポートヘッダー
      • サブレポート2-詳細-表3レコード情報
      • サブレポート2-レポートフッター
  • メインレポート-詳細(抑制)
  • メインレポート-グループ1フッター
  • メインレポート-レポートフッター
  • メインレポート-ページフッター

これにより、各TABLE1レコードのTABLE1ヘッダーと、それに続くTABLE2およびTABLE3情報を含むレポートが作成されます。これらの情報が繰り返されたり、気が狂ったりすることはありません。

これは意味がありますか、それともまったく役に立ちますか?

于 2012-07-20T13:41:46.540 に答える