是否可以将SYSDATE用作列别名?

时间:2016-04-17 07:06:10

标签: oracle alias 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

1 个答案:

答案 0 :(得分:0)

您希望使用数据存储工具执行报告作业。数据库(和SQL)用于存储和检索数据,而不是用于创建报告。有一些特殊的工具可用于创建报告。

在数据库设计中,以表格或列名称编码实际数据是非常不健康的。作为名称(以及它们的使用方式)的一部分,表名和列名都不应具有员工ID,日期或任何其他实际数据。实际数据应该只在字段中,而字段又在不同表中的列中。

根据您的描述,您的基表应包含员工,活动和日期的列。然后在任何一天,如果你想要计算"当前"那天,你可以用

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

如果您愿意,还可以加入" activity_date"输出中的列,将显示报告的运行日期。

请注意,我假设了" date"的列名。是" activity_date。"在我使用的输出中" ct"对于列别名,不是"计数。" DATE和COUNT是保留字,如SYSTIME,您不应将它们用作表或列名。您可以将它们用作别名,只要您不需要在SQL中的任何其他位置引用这些别名,但它仍然是一个非常糟糕的主意。想象一下,你需要引用一个列(按名称或别名),名称或别名是SYSDATE。这样的where子句意味着什么?

where sysdate = sysdate

你看到了问题吗?

另外,我无法从您的问题中说出 - 您是否考虑将这些报告存回数据库?到底是什么?最好只存储一个查询并在需要时运行它(并使" activity_date"您想要计数)作为输入参数,这样您就可以随时运行任何日期的查询未来。只要正确维护基表,就不需要将实际的每日报告存储在数据库中。

祝你好运!

相关问题