3

標準SQLを使用して、トップタイトルのレポートを作成するにはどうすればよいですか?

昨年、私はデータベースコンテストに参加しました。説明には、MySQL、Oracle、またはMSSQLServerを使用できると書かれていました。私がMySQLを選んだのは、それが私がよく知っていることだからです。リストされているDBMSのいずれかで機能する標準SQLを使用してSQLステートメントを作成する必要があるとのことです。私はグーグルを検索しましたが、以下の問題に関連するチュートリアルや何かを見つけることができませんでした。どこを探すか、何を検索するかについての提案は素晴らしいでしょう。

  1. グループ化して、プランIDのコントロールブレークを実行します(ブレークの後に1行スキップします)。
  2. 図のように、上部のタイトルと下部のタイトルを挿入します。
  3. ページサイズを30に設定し、線の幅を65に設定します。
  4. 列1の幅は10、列2の幅は15、列3の幅は15、列4の幅は20です。

予想されるフォーマットされたレポートを以下に示します。

ここに画像の説明を入力してください

4

2 に答える 2

3

18か月前、私は実際のレポートアプリケーションに対して、これに似た2つのクエリを作成する必要がありました。要件は異常であり、異常なレポート環境ではありませんでしたが、それでも非常に正気で賢明でした。次に、クエリの最終製品がMS-Accessにスピンインされ、最終的なレポートと印刷が行われました。実際にプログラミングするのはとても楽しかったです。

私が最もよく知っているSQL方言であるSQLServerを使用すると、レポートは次のように作成できます。

概説されたレポートの30行のうち、20行はデータ行であり、10行はページヘッダー、列ヘッダー、またはページフッター行であることに注意してください。

  1. 必要な長さのvarcharに変換された各フィールドを出力する、プランIDにグループ化されたメインデータのクエリを作成します。
  2. 各行の出力として単一の65文字のテキスト文字列を生成するスーパークエリを(1)上に構築します
  3. PlanIdで(2)をグループ化するスーパークエリをgrouping(PlanId)作成し、すべての列に空の文字列を生成するテストを実行します。これは、各PlanIdグループの後の空白行です。
  4. 各行に順次RowNumberを割り当てるスーパークエリover(3)を作成し、フィールドPageNumber = floor(RowNumber / 20)と を計算しますPageSequence = RowNumber mod 20
  5. 適切なPageSequence値を使用してヘッダー/フッター行を手動で作成し、(4)のPageNumberの個別の値にクロス結合します。
  6. すべて(4)および(5)を適切なOrderBy句で結合します。
  7. 等。

これらの手法を適用する必要があった実際のアプリケーションでは、MS-Accessレポートを作成する必要がありました。このレポートでは、ページごとに6つの数値列と1つの説明列があり、最後の数値列は以前のすべての合計である、水平方向に不足するページ数があります。数値列。レポート全体はこれらのうちの3つであり、それぞれが新しいページから始まりますが、それぞれ数値列の数が異なります。生データがSQLServerにどのように格納されているか、およびデータリンクが遅いため、レポート全体を3つの個別のクエリよりも1つのクエリとして実行する方がはるかに効率的でした。

楽しむ。

PS 他のプロジェクトの制約のため、古いスタイルのCと同様のSQLマクロ機能を使用してこのSQLを動的に作成できるという利点がありました。もちろん、誰がそのようなことを聞​​いたことがあるので、手巻き。あなたがそれをそのように書くことができるとき、それはほとんど構造化されているように見えます。

于 2013-03-25T22:39:37.297 に答える
0

私は古い質問を片付けています。興味があるかもしれない人のために、私は実際に競争のためにPL/SQLを使用しました。SQLで直接「レポート」を作成するのに最適です。http://www.oracle.com/technetwork/database/features/plsql/index.html

于 2018-01-28T22:46:13.993 に答える