SQL查询以获得以下结果

时间:2019-07-30 19:46:14

标签: sql oracle

表格:

create table stock(bDate date, packing varchar(100),  Balance number);

insert into stock values(to_date('1-JAN-2019','DD-MM-YY'),'10kg Normal Bags', 60);
insert into stock values(to_date('1-JAN-2019','DD-MM-YY'),'15kg Box', 60);
insert into stock values(to_date('1-JAN-2019','DD-MM-YY'),'Cealing Role',  60);
insert into stock values(to_date('1-JAN-2019','DD-MM-YY'),'Cello Tape', 60);

insert into stock values(to_date('2-JAN-2019','DD-MM-YY'),'10kg Normal Bags',  70);
insert into stock values(to_date('2-JAN-2019','DD-MM-YY'),'15kg Box',70);
insert into stock values(to_date('2-JAN-2019','DD-MM-YY'),'Cealing Role', 70);
insert into stock values(to_date('2-JAN-2019','DD-MM-YY'),'Cello Tape',  70);

insert into stock values(to_date('3-JAN-2019','DD-MM-YY'),'10kg Normal Bags',80);
insert into stock values(to_date('3-JAN-2019','DD-MM-YY'),'15kg Box', 80);
insert into stock values(to_date('3-JAN-2019','DD-MM-YY'),'Cealing Role', 80);
insert into stock values(to_date('3-JAN-2019','DD-MM-YY'),'Cello Tape', 80);

看起来像

enter image description here

现在我要按如下方式表示该表中的数据

enter image description here

我尝试过

SELECT * FROM
(
  SELECT * FROM stock
)
PIVOT 
(
  MAX(Balance)
  FOR bDate
  IN (to_date('1-jan-2019','DD-MM-YYYY') as "1-JAN-2019", to_date('2-jan-2019','DD-MM-YYYY') as "2-JAN-2019" , to_date('3-jan-2019','DD-MM-YYYY')  as "3-JAN-2019")
)
ORDER BY packing;

我得到了预期的输出。但是将动态添加将来日期的记录,例如4-JAN-2019、5-JAN-2019等。那如何在上面的查询中管理它?

我已经尝试过

SELECT * FROM
(
  SELECT * FROM stock
)
PIVOT 
(
  MAX(Balance)
  FOR bDate
  IN (select distinct(bDate) from stock)
)
ORDER BY packing;

错误:

ORA-00936: missing expression
00936. 00000 -  "missing expression"
*Cause:    
*Action:
Error at Line: 9 Column: 7

如何使用列标签作为对应的日期动态地实现此结果,如图所示?

0 个答案:

没有答案