2016-04-17 43 views
0

如果我想每天運行報告並將報告的日期存儲爲列標題之一。這可能嗎?是否可以使用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,日期或其他任何實際數據位。實際數據只應在字段中,而字段又在不同表格的列中。

從你所描述的,你的基表應該有員工,活動和日期的列。然後在某一天,如果你想在「當前」天數,你可以用

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

如果你想查詢,你也可以在輸出中包含了「activity_date」一欄,將顯示報告的運行日期。

請注意,我假定「日期」的列名稱爲「activity_date」。而在輸出中,我使用「ct」作爲列別名,而不是「count」。 DATE和COUNT是保留字,如SYSTIME,您不應將它們用作表或列名稱。只要不需要在SQL中的其他任何地方引用這些別名,就可以將它們用作別名,但這仍然是一個非常糟糕的主意。想象一下,你需要引用一個列(通過名稱或別名),名稱或別名是SYSDATE。這裏的where子句是什麼意思?

where sysdate = sysdate 

您是否看到問題?

此外,我不能告訴你的問題 - 你是否想把這些報告存回數據庫?爲了什麼目的?最好只存儲一個查詢,並在需要時運行它(並將您希望計數的「activity_date」作爲輸入參數),以便您可以在將來的任何時間對任何日期運行查詢。只要基本表得到適當的維護,就不需要將實際的日常報告存儲在數據庫中。

祝你好運!