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”列,这将显示报告的运行日期。

请注意,我假设“日期”的列名是“活动日期”。在输出中,我使用“ct”作为列别名,而不是“count”。DATE 和 COUNT 是保留字,如 SYSTIME,您不应将它们用作表名或列名。您可以将它们用作别名,只要您不需要在 SQL 的其他任何地方引用这些别名,但这仍然是一个非常糟糕的主意。想象一下,您需要引用一个列(按名称或别名),而名称或别名是 SYSDATE。像这样的 where 子句是什么意思?

where sysdate = sysdate

你看到问题了吗?

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

祝你好运!

于 2016-04-17T10:35:05.370 回答