首页 > 解决方案 > 使用我指定的日期列创建查询,但无法创建临时表

问题描述

我在我的数据库中具有只读访问权限,并且我有一个看起来像这样的表;

表格1

我想要一个如下所示的输出

表2

这可能吗?我想我需要一张日期表才能通过,但我不知道该怎么做。任何帮助,将不胜感激。

标签: sqloracle

解决方案


使用子查询因式分解子句 ( WITH) 生成要加入的日期:

WITH dates ( dt ) AS (
  SELECT DATE '2016-07-01' FROM DUAL UNION ALL
  SELECT DATE '2017-07-01' FROM DUAL UNION ALL
  SELECT DATE '2019-08-01' FROM DUAL
)
SELECT EXTRACT(MONTH FROM d.dt) AS Month,
       EXTRACT(YEAR FROM d.dt) AS Year,
       NVL2(t.SomeValue, 'Y', 'N') AS "Change?"
FROM   dates d
       LEFT OUTER JOIN table_name t
       ON ( TRUNC(t.effective_date, 'MM') = d.dt )

我想要的输出将包括从 1/2012 开始的每个月和每年。

然后使用递归子查询因式分解子句:

WITH dates ( dt ) AS (
  SELECT DATE '2012-01-01' FROM DUAL
UNION ALL
  SELECT ADD_MONTHS( dt, 1 )
  FROM   dates
  WHERE  ADD_MONTHS( dt, 1 ) <= SYSDATE
)
SELECT EXTRACT(MONTH FROM d.dt) AS Month,
       EXTRACT(YEAR FROM d.dt) AS Year,
       NVL2(t.SomeValue, 'Y', 'N') AS "Change?"
FROM   dates d
       LEFT OUTER JOIN table_name t
       ON ( TRUNC(t.effective_date, 'MM') = d.dt )

推荐阅读