Sql 以日历格式显示查询结果

Sql 以日历格式显示查询结果,sql,oracle,calendar,Sql,Oracle,Calendar,我有四个表客户、产品、日历、订单,数据如下- 1) 客户[客户即主键] CUST ---- ABC Inc XYZ Corporation 2) 产品[PID为PK] PID PRODUCT --- ------- 101 Chair 102 Table 103 Sofa 104 Cot 3) CALENDAR[DATE is PK]-用于存储日期和天数的简单日历表 DATE DAY ---- --- 2015-01

我有四个表客户、产品、日历、订单,数据如下-

1) 客户[客户即主键]

CUST
----
ABC Inc
XYZ Corporation
2) 产品[PID为PK]

PID     PRODUCT
---     -------
101     Chair
102     Table
103     Sofa
104     Cot
3) CALENDAR[DATE is PK]-用于存储日期和天数的简单日历表

DATE        DAY
----        ---
2015-01-01  THU
2015-01-02  FRI
....
2015-06-30  TUE
4) 订单[OID是PK]-用于存储订单信息

OID     CUST     DATE        PID     QUANTITY
---     ----     ----        ---     --------
1       ABC Inc  2015-02-17  101     2
2       ABC Inc  2015-02-17  102     5
3       ABC Inc  2015-02-18  102     1
4       ABC Inc  2015-02-18  103     8
5       ABC Inc  2015-02-18  104     6
请帮助我使用SQL/PLSQL获取ABC Inc客户的订单详细信息,该客户应以日历格式(一周5个工作日)显示产品和数量,如下所示:-


所有产品应显示在第1列中。一周的开始和结束工作日期应由sysdate决定。

您可以使用
PIVOT

   WITH pvt AS (
           SELECT p.product, o.quantity, o.date
           FROM   Orders o
           JOIN Products p on o.pid=p.pid
           )
   SELECT *
   FROM   pvt
   PIVOT (
          quantity                    
          FOR date
          IN  ('2015-02-16','2015-02-17','2015-02-18', '2015-02-19','2015-02-20')   
         );

看起来像是动作中的
pivot
'2015-02-16'不是日期,而是字符串。
当然是
,因为用户没有提到,所以我不确定日期字段的数据类型是什么(它可能是varchar!!,但很可能是日期,如果是,则用户需要将其转换为日期,即:使用
to_date
OP已清楚地提到它是一个日期数据列。
CALENDAR[日期是主键]一个简单的日历表来存储日期和日期< /代码>不,抱歉不是Currand,他/她提到的日期是“代码>列的名称<代码> >不是<代码>数据类型< /代码>只是查看他/她对于其他表的相同描述。但是谢谢你的评论,这些评论非常明显,我应该考虑标准。“日期列的数据类型是
date
”,您的注释完成了答案,但我不喜欢修改和编辑太多答案,所以我可能不会编辑它,因为我担心编辑太多。
   WITH pvt AS (
           SELECT p.product, o.quantity, o.date
           FROM   Orders o
           JOIN Products p on o.pid=p.pid
           )
   SELECT *
   FROM   pvt
   PIVOT (
          quantity                    
          FOR date
          IN  ('2015-02-16','2015-02-17','2015-02-18', '2015-02-19','2015-02-20')   
         );