2016-04-17 13 views
0

レポートを毎日実行し、レポートの日付を列見出しの1つとして保存する場合は、これは可能ですか?SYSDATEを列エイリアスとして使用できますか?

出力例(その日のために従業員の活動を数える):

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 
+0

エイリアスとして使用できますが、予想通りに外挿されず、単に "SYSDATE"という単語のままになります –

+0

SYSDATE自体は使用できません。 SYSDATEを使わずに現在の日付を取得する方法はありますか? – user3144072

+1

エイリアスが動的になるようにクエリを動的に作成できます。あなたがそれをどうやって行うのかは、私たちがどんな種類の報告をしているかによって決まります。レポートアプリケーションを使用していますか? 'SQL * Plus'を使ってテキストレポートを生成しますか?他に何か? –

答えて

0

あなたは、データ格納ツールで報告仕事をしようとしています。データベース(およびSQL)は、レポートを作成するのではなく、データを格納および取得するためのものです。レポートを作成するための特別なツールがあります。

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

あなたの説明から、基本表に従業員、活動、および日付の列が必要です。あなたは「現在の」一日のカウントをしたい場合は、任意の日に、あなたがしたい場合、あなたはまたのために表示される出力の「activity_date」の列を含めることができ

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

で問い合わせることができますレポートが実行された日付。

「日付」の列名を「activity_date」とします。そして出力では、 "count"ではなく "ct"を列別名に使用しました。 DATEとCOUNTはSYSTIMEのような予約語です。これらを表名または列名として使用しないでください。これらのエイリアスをSQLの他の場所で参照する必要がないかぎり、それらをエイリアスとして使用できますが、依然として非常に悪い考えです。列を(名前または別名で)参照する必要があり、名前または別名がSYSDATEであるとします。 where節はどういう意味でしょうか?

where sysdate = sysdate 

問題が表示されますか?

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

幸運を祈る!

関連する問題