【发布时间】:2016-06-13 10:40:43
【问题描述】:
要求
如何为每个产品选择/获取月-年 (MON-YY) 明智的结果? 我尝试将查询编写为:
SELECT * FROM
(
SELECT PRODUCT_CODE AS PRODUCT
, EXTRACT (MONTH FROM (UPDATED_DATE)) AS month_num
, PRODUCT_CODE
FROM Test_Pivot
)
PIVOT ( COUNT (PRODUCT_CODE)
FOR month_num IN ( 1 AS jan, 2 AS feb, 3 AS mar, 4 As apr, 5 as may, 6 AS jun,
7 AS jul, 8 AS aug, 9 AS sep, 10 As oct, 11 as nov, 12 AS dec
)
);
我得到了结果,但无论年份如何,它都会给出完整的计数。我不知道如何修改 SQL 以限制从当前月份到最后 6 个月的计数。我希望将 Months 列动态显示为“MON-YY”,而不仅仅是下面示例格式中描述的“MON”
PRODUCT JAN-16 FEB-16 MAR-16 APR-16 MAY-16 JUN-16
-------------------------------------------------------------
D 1 0 1 0 0 2
A 1 0 2 0 4 1
B 1 0 2 1 1 0
C 0 0 1 0 4 1
- 以上示例中的数据仅用于描述,(6-16 为当前月份)
示例表
CREATE TABLE Test_Pivot (
id NUMBER,
customer_id NUMBER,
product_code VARCHAR2(5),
quantity NUMBER,
Updated_date date
);
样本数据
INSERT INTO Test_Pivot VALUES (1, 1, 'A', 10, sysdate);
INSERT INTO Test_Pivot VALUES (2, 1, 'B', 20, sysdate-50);
INSERT INTO Test_Pivot VALUES (3, 1, 'C', 30, sysdate-90);
INSERT INTO Test_Pivot VALUES (4, 2, 'A', 40, sysdate-75);
INSERT INTO Test_Pivot VALUES (5, 2, 'C', 50, sysdate-25);
INSERT INTO Test_Pivot VALUES (6, 3, 'A', 60, sysdate-20);
INSERT INTO Test_Pivot VALUES (7, 3, 'B', 70, sysdate-80);
INSERT INTO Test_Pivot VALUES (8, 3, 'C', 80, sysdate-40);
INSERT INTO Test_Pivot VALUES (9, 3, 'D', 90, sysdate-5);
INSERT INTO Test_Pivot VALUES (10, 4, 'A', 100, sysdate-35);
INSERT INTO Test_Pivot VALUES (11, 2, 'A', 40, sysdate-75);
INSERT INTO Test_Pivot VALUES (12, 2, 'C', 50, sysdate-25);
INSERT INTO Test_Pivot VALUES (13, 3, 'A', 60, sysdate-20);
INSERT INTO Test_Pivot VALUES (14, 3, 'B', 70, sysdate-80);
INSERT INTO Test_Pivot VALUES (15, 3, 'C', 80, sysdate-40);
INSERT INTO Test_Pivot VALUES (16, 3, 'D', 90, sysdate-5);
INSERT INTO Test_Pivot VALUES (17, 4, 'A', 100, sysdate-35);
INSERT INTO Test_Pivot VALUES (18, 3, 'B', 60, sysdate-400);
INSERT INTO Test_Pivot VALUES (19, 3, 'C', 70, sysdate-365);
INSERT INTO Test_Pivot VALUES (20, 3, 'D', 80, sysdate-450);
INSERT INTO Test_Pivot VALUES (21, 3, 'A', 90, sysdate-500);
INSERT INTO Test_Pivot VALUES (22, 4, 'A', 100, sysdate-555);
INSERT INTO Test_Pivot VALUES (23, 2, 'B', 40, sysdate-543);
INSERT INTO Test_Pivot VALUES (24, 2, 'B', 50, sysdate-150);
INSERT INTO Test_Pivot VALUES (25, 3, 'D', 60, sysdate-151);
【问题讨论】:
标签: sql oracle oracle11g pivot