【问题标题】:Ask for help in making a pivot query working with a dynamic date range在使用动态日期范围进行数据透视查询时寻求帮助
【发布时间】:2018-12-14 07:15:34
【问题描述】:

我有查询 1,它返回一周中从星期六开始到星期五结束的 7 个日期。

 SELECT TRUNC(to_date('08-Jul-2018', 'dd-Mon-yyyy'), 'IW') 
      + Level - (1+ TRUNC(to_date('08-Jul-2018', 'dd-Mon-yyyy'), 'IW') 
      - TRUNC(to_date('08-Jul-2018', 'dd-Mon-yyyy'), 'IW'))
   FROM dual
CONNECT BY level <= 8; --great

查询二是一个透视查询,现在可以正常使用硬编码的日期。我怎样才能使枢轴(sum(counts)从insrt in(.....))变成动态的?您现在看到它是硬编码的。谢谢

WITH tbl AS
  ( SELECT DISTINCT rowlabel,
    TO_CHAR(insrt ,'mm-dd-yyyy'),
    counts
  FROM tbl
  WHERE TRUNC(insrt) >= to_date('01-01-1900', 'MM-DD-YYYY')
  AND TRUNC(insrt)   <= to_date('12-31-4000', 'MM-DD-YYYY')
  )

SELECT                                             *
FROM tbl pivot ( 
  SUM(counts) FOR insrt IN ('06-30-2018','07-01-2018','07-02-2018','07-03-2018',
                            '07-04-2018','07-05-2018','07-06-2018')
) ;

【问题讨论】:

  • 查询 1 和 2 之间似乎没有相关性,请多介绍一下表 tbl(结构和样本值)。
  • 您能发布您拥有的数据以及您希望输出的样子吗?
  • 您好,感谢您的回复和热心帮助!
  • 我重新发布我的问题,希望它可能更清楚一点。

标签: sql oracle date dynamic pivot


【解决方案1】:
select trunc(to_date('04-JUL-2018', 'dd-Mon-yyyy'), 'IW') + level -1
from dual
connect by level < 7;
--Query 2
WITH t AS
  ( SELECT DISTINCT test_number,
    TO_CHAR(insrt_dttm,'mm-dd-yyyy') AS date_without_time,
    rec_cnt
  from cdw_t.data_monitoring_result
  WHERE TRUNC(insrt_dttm) >= to_date('01-01-1900', 'MM-DD-YYYY')
  AND TRUNC(insrt_dttm)   <= to_date('12-31-4000', 'MM-DD-YYYY')
  )

SELECT                                             *
FROM t pivot ( SUM(rec_cnt) FOR date_without_time IN ('06-30-2018','07-01-2018','07-02-2018','07-03-2018','07-04-2018','07-05-2018','07-06-2018')) ;
TEST_NUMBER '06-30-2018'    '07-01-2018'    '07-02-2018'    '07-03-2018'    '07-04-2018'    '07-05-2018'    '07-06-2018'
51  10  10  10  11  14  14  14                  
1   179 179 179 179 179 179 179
30  127 127 127 127 127 127 127
53  594 594 594 594 594 594 226

Above is the sample output.  I was hoping that maybe I can use query 1 replace the hard coded dates in the FOR statement brackets.   I don't know how to write PL/SQL and not sure if it is possible to have a dynamic range inside the pivot for statement.  

【讨论】:

  • 如果这能更好地描述我的问题,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多