OK、私がやろうとしていることへのいくつかの密接な参照を見つけましたが、与えられた例と答えは、私が推定するには単純すぎるか、理解するには複雑すぎました。私はプロの DBA ではありません。営業部門のために Visual Studio 2012 でレポートを書かなければならない貧弱なネットワーク技術者です。よろしくお願いします。
基本的に、レポート デザイナーで、'custextract' と 'histextract' の 2 つのテーブルからプルするクエリを作成する必要があります。結果は 30 フィールドの長さになります (レポートにはすべてのフィールドが必要なので、クエリでグループ化しようとしないことをすぐに学びました)。
最終レポートでは、営業担当者が現場に行くための「顧客連絡先ページ」を作成する必要があります (顧客ごとに 1 ページ)。上部は基本的な顧客情報であり、すべて顧客テーブルから取得されます。下部は、製品ラインごとの販売履歴情報 (期間累計、年累計、昨年など) の表です。考えられる製品ラインは約 30 ありますが、ほとんどのお客様は少数からしか購入しません。レポートは、年初来の DESC によって ORDERED された EACH Customer の TOP(10) 行のみを返す必要があります (それが理にかなっている場合)。私がこれまでに持っているクエリは次のとおりです。
SELECT custextract.*, histextract.*
FROM custextract
INNER JOIN histextract
ON custextract.[cusx-cust-no] = histextract.[hisx-cust]
WHERE (custextract.[cusx-ecall-select] = 'Y')
ORDER BY histextract.[hisx-sales-ytd] DESC
明らかな問題は、SELECT に TOP(10) を含めると、顧客ごとではなく、合計上位 10 件しか得られないことです。Count(histextract.[hisx-cust]) AS 番号を選択し、番号に基づいて何らかの反復ループを実行し、すべての結果を結合する必要があると想定していますが、これを効果的に達成する方法が完全に失われています。Select、From、Where、Order by、Into は、基本的に私のクエリ スキルの限界です。
ストアド プロシージャを使用して .csv ファイルとしてやってくる ISAM データベースの抽出からこれらの 2 つのテーブルを作成しています (それをトリガーする方法はまだわかりませんが、それは後で説明します)。基本的には、TRUNCATE および BULK INSERT 操作のみです。ただし、並べ替えおよびフィルター処理されたデータを保持する 3 番目のテーブルを作成し、その更新手順を使用して目的のデータセットを作成し続けることが理にかなっている場合 (レポート デザイナーでその 3 番目のテーブルを使用するだけです)、私はそれを受け入れます - ただ方法がわからない。
どんな助けでも大歓迎です。