【发布时间】:2018-03-08 13:27:25
【问题描述】:
这是thread的延续 我有以下查询以使用
将值作为标题 SELECT *
FROM (SELECT prod_id,
start_date AS dt,
start_date,
hours
FROM prod_timings t) PIVOT (SUM (hours)
FOR start_date
IN (TO_DATE ('18-SEP-17', 'DD-MON-YY') AS wed,
TO_DATE ('19-SEP-17', 'DD-MON-YY') AS thu))
ORDER BY prod_id, dt
我可以使用以下查询在 PIVOT 的 IN 子句中使用动态日期吗?这个想法是在 IN 子句中进行动态查询,以避免对日期进行硬编码
SELECT *
FROM ( SELECT (TO_DATE (:end_date, 'DD-MM-YYYY') - LEVEL + 1) AS day
FROM DUAL
CONNECT BY LEVEL <=
( TO_DATE (:end_date, 'DD-MM-YYYY')
- TO_DATE (:start_date, 'DD-MM-YYYY')
+ 1))
绑定值
end_date - 19-Sep-17
start_date - 18-Sep-17
上面的输出是
19-Sep-17
18-Sep-17
预期输出是
╔═════════╦════════════╦════════╦════════╦═══════════╗
║ PROD_ID ║ START_DATE ║ MON-18 ║ TUE-19 ║ TOT_HOURS ║
╠═════════╬════════════╬════════╬════════╬═══════════╣
║ PR220 ║ 19-Sep-17 ║ ║ 0 ║ 0 ║
║ PR2230 ║ 19-Sep-17 ║ ║ 2 ║ 2 ║
║ PR9702 ║ 19-Sep-17 ║ ║ 3 ║ 3 ║
║ PR9036 ║ 19-Sep-17 ║ ║ 0.6 ║ 0.6 ║
║ PR9036 ║ 18-Sep-17 ║ 3.4 ║ ║ 3.4 ║
║ PR9609 ║ 18-Sep-17 ║ 5 ║ ║ 5 ║
║ PR91034 ║ 18-Sep-17 ║ 4 ║ ║ 4 ║
║ PR7127 ║ 18-Sep-17 ║ 0 ║ ║ 0 ║
╚═════════╩════════════╩════════╩════════╩═══════════╝
表结构和值
CREATE TABLE PROD_TIMINGS
(
PROD_ID VARCHAR2(12 BYTE),
START_DATE DATE,
TOT_HOURS NUMBER
);
SET DEFINE OFF;
Insert into PROD_TIMINGS
(PROD_ID, START_DATE, TOT_HOURS)
Values
('PR220', TO_DATE('09/19/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0);
Insert into PROD_TIMINGS
(PROD_ID, START_DATE, TOT_HOURS)
Values
('PR2230', TO_DATE('09/19/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 2);
Insert into PROD_TIMINGS
(PROD_ID, START_DATE, TOT_HOURS)
Values
('PR9702', TO_DATE('09/19/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 3);
Insert into PROD_TIMINGS
(PROD_ID, START_DATE, TOT_HOURS)
Values
('PR9036', TO_DATE('09/19/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0.6);
Insert into PROD_TIMINGS
(PROD_ID, START_DATE, TOT_HOURS)
Values
('PR9036', TO_DATE('09/18/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 3.4);
Insert into PROD_TIMINGS
(PROD_ID, START_DATE, TOT_HOURS)
Values
('PR9609', TO_DATE('09/18/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 5);
Insert into PROD_TIMINGS
(PROD_ID, START_DATE, TOT_HOURS)
Values
('PR91034', TO_DATE('09/18/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 4);
Insert into PROD_TIMINGS
(PROD_ID, START_DATE, TOT_HOURS)
Values
('PR7127', TO_DATE('09/18/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0);
COMMIT;
【问题讨论】:
标签: sql oracle oracle11g pivot