【问题标题】:IReport Creation Issue- Get all Months of YearIReport 创建问题 - 获取一年中的所有月份
【发布时间】:2015-12-15 07:12:47
【问题描述】:

我想使用 iReport (JasperReports) 为各个月份的员工的 LeaveCount 创建一个交叉表。我正在使用 Oracle 数据库。

问题是,我只得到了措施存在的月份,我想显示一年中的所有月份,无论这个月是否存在措施(员工休假)。

【问题讨论】:

  • 向我们展示获取月份的方法调用。
  • 这是一个使用 to_char(leavedate,'MONTH') 的 sql 查询。这会生成包含休假数据的月份列表
  • 我进行了替代搜索,发现我需要在 Oracle 本身中显示所有月份,因此目前正在搜索以在没有数据的情况下在 oracle 中显示所有月份的方式

标签: oracle jasper-reports crosstab


【解决方案1】:

你可以创建一个表

CREATE TABLE ALLMONTHS
(
    MONTHS_MM varchar2(2)
)
;

并在此表中插入所有 12 个月 (01,02,03,04...12)。 现在使用如下表格查询

SELECT a.MONTHS_MM,b.leavecount
FROM ALLMONTHS a
,(SELECT to_char(leavedate,'MM') AS MONTH,leavecount..."your query")b
WHERE a.MONTHS_MM=b.MONTH(+)

【讨论】:

    【解决方案2】:

    用@Pu297 建议的答案解决了这个问题。后来我得到了一个更好的方法,它不需要创建表,并且每次我需要在新数据库上运行报告时都省去了创建表的麻烦。

    select a.mnth,b.leavecount from
    (
         SELECT to_char(to_date(LVL,'MM'),'MM') mnth
         FROM (select level lvl from dual CONNECT BY LEVEL <=12)
    ) a
    ,(SELECT to_char(leavedate,'MM') AS MONTH,leavecount..."your query")b
    WHERE a.mnth=b.MONTH(+)
    

    我认为这是解决此问题的更好方法。 干杯!!!

    【讨论】:

    • 完美,这样我们就不用创建新表了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多