私の目的は、同じOracle SQLデータベース・スキーマ内に、合計50個の表からのデータのボート・ロードを示すデータセットを生成することです。最初を除く各テーブルには限りレポートとして私が心配、二つの要素建物だ、から構成されていますOracle SQL:コンポーネント表からのエントリを一度表示する
- 最初のテーブルの上の行に一致する外部キー識別子を
- 日
これらのテーブルの1つには、1つのケースに対応する行が多数あり、テーブルからテーブルまでの行数は同じではありません。
私の目的は、最初のテーブルの各行を、他のテーブルのすべての結果を一度表示するのに必要な回数だけ表示させることです。だから、(多くのテーブルを除く)は、このような何か:
CASE_FILE_ID INITIATED_DATE INSPECTION_DATE PAYMENT_DATE ACTION_DATE
------------ -------------- --------------- ------------ -----------
1000 10-JUL-1986 14-JUL-1987 10-JUL-1986
1000 14-JUL-1988 10-JUL-1987
1000 14-JUL-1989 10-JUL-1988
1000 10-JUL-1989
私の現在のSQLコード(5つのテーブルにまで縮小したが、残りはすべてT1-T4と同じフォーマットに従う):
SELECT DISTINCT
A.CASE_FILE_ID,
T1.DATE AS INITIATED_DATE,
T2.DATE AS INSPECTION_DATE,
T3.DATE AS PAYMENT_DATE,
T4.DATE AS ACTION_DATE
FROM
RECORDS.CASE_FILE A
LEFT OUTER JOIN RECORDS.INITIATE T1 ON A.CASE_FILE_ID = T1.CASE_FILE_ID
LEFT OUTER JOIN RECORDS.INSPECTION T2 ON A.CASE_FILE_ID = T2.CASE_FILE_ID
LEFT OUTER JOIN RECORDS.PAYMENT T3 ON A.CASE_FILE_ID = T3.CASE_FILE_ID
LEFT OUTER JOIN RECORDS.ACTION T4 ON A.CASE_FILE_ID = T4.CASE_FILE_ID
ORDER BY
A.CASE_FILE_ID
問題は、この出力結果が別のの組み合わせになります。;上記の例では、ケース1000の4行ではなく、A.CASE_FILE_ID = '1000'の 'WHERE'句を追加した場合、12行(1開始日* 3検査日* 4支払日= 12行)。表の数が増えるにつれて、これは表示とランタイムの両方で非常に高速になります。
上記の理想に近いような出力を得るには、どの日付を1回だけ表示するのが最適ですか?それに失敗すると、たとえいくつかの日付がその中で繰り返されても、すべての日付を表示する必要があるので、1つのCASE_FILEに対して複数の行だけを表示する方法がありますか?
上記の描画データ(SQL)1より表示機能の詳細です。上記のデータを表示する仕組みは何ですか?クリスタルレポート? PHP?通常、このタイプのブレークロジックは、ユーザーエクスペリエンス(UX) – xQbert
の一部として、ユーザーインターフェイス(UI)内で実行されます。レンダリングは、黙示によるものよりも多くのものが意図されています。しかし、Gordon Linoffの2番目の方法はこれを正確に示しています。 SSRSは最終的な表示メカニズムになります... Excelに直接アクセスできる必要があることを除いて、できるだけ有用な生のテーブルは理想的です行グループ等を含む。ありがたいことに、それはすでにあります。 –
SSRSの場合は、クエリをレポートにリンクすると簡単になります。http://stackoverflow.com/questions/12940805/blank-out-duplicate-column-values-in-sql-reporting-services "テキストボックスのHideDuplicatesを設定するプロパティを含むグループ名に「 – xQbert