oracle 10g pl/sql 行转列问题
编写 SQL 语句保存为 .sql 文件运行,查询各产品的季度销售额,查询结果包括:产品名称、订购年份、第1季度销售额、第2季度销售额、第3季度销售额、第4季度销售额;
这个是不是要用到decode 、case 、when、then 、end 什么的啊,要怎么写啊 ,我查出来的都没按产品名称分类
select p.ProName,extract(year from OrderDate) as OYEAR,
DECODE ( to_char( o.OrderDate,'q'),   '1', to_char(sum(s.Price * s.Num * ( 1- s.Disconut )))) one,
DECODE ( to_char( o.OrderDate,'q'),   '2', to_char(sum(s.Price * s.Num * ( 1- s.Disconut )))) two,
DECODE ( to_char( o.OrderDate,'q'),   '3', to_char(sum(s.Price * s.Num * ( 1- s.Disconut )))) three,  
DECODE(to_char(o.OrderDate,'q'),'4', to_char(sum(s.Price * s.Num * ( 1- s.Disconut )))) four
from Class c full outer join Product p  
on c.ClassID=p.ClassID full outer join SaleOrderItem s  on  
p. ProID=s.ProductID full outer join Orders o  
  on s.OrderID=o.OrdersID  
group by rollup (p.ProName,to_char(o.OrderDate,'q'),extract(year from OrderDate) , s.Price,s.Num,s.Disconut)
表结构
create table Orders
(
     OrdersID                 number(7)        not null,
     CusID                   varchar2(5),
     EmpID                 number,
     OrderDate                DATE,
     ArrivalDate                 DATE,
     DispatchDate                  DATE,
     Deliverier               varchar2(20),
     Deliveryfee                number(7,2),
     HostName                 varchar2(40),
     HostAddress                 varchar2(60),
     HostCity                 varchar2(25),
     HostArea                 varchar2(25),
     HostPC               varchar2(20),
     HostState                 varchar2(25)
);
create table Product
(
     ProID NUMBER not null,
     ProName VARCHAR2(20),
     SupID NUMBER,
     ClassID NUMBER,
     UnitNum VARCHAR2(20),
     Price  number(7,2),
     Stock NUMBER,
     Orders NUMBER,
     Reorders NUMBER,
     Stop VARCHAR2(5) not null
)
create table SaleOrderItem
(
     OrderID                 number,
     ProductID                 number,
     Price                   number(7,2),
     Num                  number,
     Disconut                   number(7,2)
);
------解决方案--------------------
那你不需要使用 group by rollup 把,直接 group by 产品名称,年,季度,将按产品和时间的数据先汇总好,然后再对汇总好的数据进行 行转列
行转列,你写的语句基本正确