我写了一个数据透视查询,如下所示。我在顶点使用此查询生成报告。在报告中,我们将两个日期选择器配置为开始日期和结束日期。根据用户输入的开始日期和结束日期,应生成一系列日期的许多动态列。虽然oracle中的pivot不允许在pivot的for子句中放置替换变量的子查询,但在顶点我可以使用替换变量。这就是我在查询中使用pivot的原因。请在下面找到查询:
SELECT *
FROM
(SELECT PROCESSNAME,
CASE
WHEN STATUS=5
THEN 'COMPLETED'
WHEN STATUS=1
THEN 'WAITING'
WHEN STATUS=11
THEN 'INVALID PRERUN'
WHEN STATUS=10
THEN 'STOP BY CONDITION'
WHEN STATUS=6
THEN 'STOPPED'
WHEN STATUS=4
THEN 'RUNNING'
WHEN STATUS=7
THEN 'STOP BY ERROR'
END AS STATUS,
TRUNC(startrundate) date1
FROM EXPORT_TABLE
WHERE TRUNC(startrundate) BETWEEN to_date('23-apr-2017','dd-mon-yyyy') AND to_date('25-apr-2017','dd-mon-yyyy')
AND processname = 'JOB1'
ORDER BY processname
) pivot ( COUNT(date1) FOR date1 IN ('23-apr-2017','24-apr-2017','25-apr-2017') )
- 这里我已经对日期进行了硬编码,但是在顶点生成时将其作为替换变量传递给我,我为此编写了一个动态生成日期范围的查询。
问题是,对于特定的作业,我想仅在一行中显示所有细节。但我上面的查询是分成不同状态的行。这是因为我在查询中考虑了状态。
PROCESSNAME STATUS 23-APR-2017 24-APR-2017 25-APR-2017
JOB1 STOP BY CONDITION 2 0 0
JOB1 COMPLETED 0 1 0
理想情况下,我想要的是同一行中每天工作的状态,如下所示:
PROCESSNAME 23-APR-2017 24-APR-2017 25-APR-2017
JOB1 STOP BY CONDITION COMPLETED NA
请让我知道实现这一目标需要做哪些更改。
谢谢和问候
答案 0 :(得分:0)
这是一个版本,可以为您提供类似但不同的结果。而不是行中的状态,状态是行标题,其中作业达到状态的日期在行数据中。我在状态的日期使用MAX()。
SELECT *
FROM
(with export_table(processname, status,startrundate) as
(select 'JOB1', 10, to_date('04/23/2017','MM/DD/YYYY') from dual union all
select 'JOB1', 10, to_date('04/24/2017','MM/DD/YYYY') from dual union all
select 'JOB1', 11, to_date('04/24/2017','MM/DD/YYYY') from dual union all
select 'JOB1', 5, to_date('04/25/2017','MM/DD/YYYY') from dual
)
SELECT PROCESSNAME,
CASE
WHEN STATUS=5
THEN 'COMPLETED'
WHEN STATUS=1
THEN 'WAITING'
WHEN STATUS=11
THEN 'INVALID PRERUN'
WHEN STATUS=10
THEN 'STOP BY CONDITION'
WHEN STATUS=6
THEN 'STOPPED'
WHEN STATUS=4
THEN 'RUNNING'
WHEN STATUS=7
THEN 'STOP BY ERROR'
END AS STATUS,
TRUNC(startrundate) date1
FROM EXPORT_TABLE
WHERE TRUNC(startrundate) BETWEEN to_date('23-apr-2017','dd-mon-yyyy') AND to_date('25-apr-2017','dd-mon-yyyy')
AND processname = 'JOB1'
ORDER BY processname
) pivot ( max(date1) FOR status in ('COMPLETED','WAITING','INVALID PRERUN','STOP BY CONDITION','STOPPED','RUNNING','STOP BY ERROR'))