DESIRE O/P LINK WHICH I EXPECT PLEASE CLICK THIS SCREENSHOOT.PNG我创建了以下静态查询
SELECT '1' AS KPI_ID,
'P2P' AS KPI_DESC,
'22-MAR-17' AS dates,
(SUM (
CASE
WHEN S_DATE BETWEEN ADD_MONTHS ('22-MAR-17', 0) - 13
AND ADD_MONTHS ('22-MAR-17', 0) - 7
THEN
VOLUME
ELSE
0
END))
LAST_WEEK_Volume,
(SUM (
CASE
WHEN S_DATE BETWEEN ADD_MONTHS ('22-MAR-17', 0) - 6
AND ADD_MONTHS ('22-MAR-17', 0)
THEN
VOLUME
ELSE
0
END))
THIS_WEEK_Volume
FROM TABLE
问题陈述:
其实我有两年的数据..
我想要计算上周的数量,当前一周的数量为2天。
那么我应该在查询中修改什么才能获得动态查询。
当前查询仅提供1天计算。
我想每天做明智的计算。
根据谷歌我发现,在定义参数start_date
和end_date
并传递到列之后,它是可能的,但我不知道什么是对或错?
请你帮帮我吗?
答案 0 :(得分:0)
什么是"动态"在这个查询?似乎是' 22-MAR-17' (周三)。
因此,如果您通过其他日期,您将获得不同的结果。怎么通过呢?使用变量。在标记SQL Developer时,您使用:param_name
语法(参数名称以冒号开头),例如
select count(*) from emp where deptno = :par_deptno
如果它是PL / SQL(是吗?怎么样?),那么它是什么类型的PL / SQL?如果是匿名阻止,您可以使用与上述相同的原则(即:param_name
)。如果是一个过程,您宁愿创建一个参数并将值传递给它。
答案 1 :(得分:0)
您可以尝试这样的事情:
with dates_table as (
SELECT to_date(:begin_date, 'dd/mm/yyyy') + ROWNUM - 1 c_date
FROM dual
CONNECT BY LEVEL <= to_date(:end_date, 'dd/mm/yyyy') - to_date(:begin_date, 'dd/mm/yyyy') + 1)
SELECT '1' AS KPI_ID,
'P2P' AS KPI_DESC,
c_date AS dates,
(SUM (
CASE
WHEN S_DATE BETWEEN ADD_MONTHS (c_date, 0) - 13
AND ADD_MONTHS (c_date, 0) - 7
THEN
VOLUME
ELSE
0
END))
LAST_WEEK_Volume,
(SUM (
CASE
WHEN S_DATE BETWEEN ADD_MONTHS (c_date, 0) - 6
AND ADD_MONTHS (c_date, 0)
THEN
VOLUME
ELSE
0
END))
THIS_WEEK_Volume
FROM TABLE, dates_table
此处dates_table
将包含begin_date
和end_date
之间的所有日期(作为行)。因此,我们将您的&#39;静态&#39;加入该表格。查询以获得所需的结果。