1

レポートを毎日実行し、レポートの日付を列ヘッダーの 1 つとして保存したい場合。これは可能ですか?

出力例 (その日の従業員の活動を数えます):

SELECT EMPLOYEE_NAME AS EMPLOYEE, COUNT(ACTIVITY) AS "Activity_On_SYSDATE" FROM EMPLOYEE_ACCESS GROUP BY EMPLOYEE_NAME;

Employee      Activity_On_17042016
Jane          5
Martha        8
Sam           11
4

1 に答える 1

0

あなたは、データ保存ツールを使用してレポート ジョブを実行しようとしています。データベース (および SQL) は、レポートを作成するためではなく、データを保存および取得するためのものです。レポートを作成するための特別なツールがあります。

データベースの設計において、実際のデータをテーブルまたは列の名前にエンコードすることは非常に不健康です。テーブル名も列名も、名前の一部 (およびその使用方法) として、従業員 ID、日付、または実際のデータのその他のビットを含むべきではありません。実際のデータは、異なるテーブルの列にあるフィールドにのみ存在する必要があります。

あなたが説明したことから、ベーステーブルには従業員、活動、日付の列が必要です。次に、任意の日に、「現在の」日のカウントが必要な場合は、次のようにクエリできます

select   employee, count(activity) ct 
from     table_name  
where    activity_date = SYSDATE 
group by employee

必要に応じて、出力に「activity_date」列を含めることもできます。これにより、レポートが実行された日付が示されます。

「date」の列名は「activity_date」であると想定していることに注意してください。また、出力では、列の別名に「count」ではなく「ct」を使用しました。DATE と COUNT は、SYSTIME などの予約語であり、テーブルまたは列の名前として使用しないでください。これらのエイリアスを SQL の他の場所で参照する必要がない限り、それらをエイリアスとして使用できますが、それでも非常に悪い考えです。列を (名前または別名で) 参照する必要があり、その名前または別名が SYSDATE であるとします。このような where 句は何を意味するのでしょうか?

where sysdate = sysdate

問題が見えますか?

また、あなたの質問からはわかりませんが、これらのレポートをデータベースに保存することを考えていましたか? 何のために?クエリを 1 つだけ保存し、必要に応じて実行する (そして、カウントが必要な "activity_date" を入力パラメーターにする) ことをお勧めします。これにより、将来の任意の日付のクエリをいつでも実行できます。ベーステーブルが適切に維持されている限り、実際の日報をデータベースに格納する必要はありません。

幸運を!

于 2016-04-17T10:35:05.370 に答える