我有一张包含多个地点和日期的销售数据的表格。 例如:
Date Area Total Sales Obj1 Obj2 Obj3 Obj4
5/29/2011 Maharastra 4 1 0 3 0
5/30/2011 Maharastra 1 0 0 0 1
5/30/2011 Kolkota 5 0 5 0 3
5/30/2011 Bihar 2 0 2 0 3
5/30/2011 Mumbai 0 0 0 0 1
5/30/2011 AndhraPradesh 3 0 3 0 2
我希望这个显示以及只有前几天数据的更多列,例如,对于Maharastra,它应该是一个列,如下所示:
Area Total Sales Obj1 Obj2 Obj3 Obj4 PrvDyTtl PrvObj1 PrvObj2 PrvObj3 PrvObj4
Maharastra 5 1 0 3 1 4 1 0 3 0
Kolkota 5 0 5 0 3 0 0 0 0 0
Bihar 2 0 2 0 3 0 0 0 0 0
Mumbai 0 0 0 0 1 0 0 0 0 0
AndhraPradesh 3 0 3 0 2 0 0 0 0 0
我无法做到这一点,因为无论我尝试做什么,我都会为马哈拉施特拉邦的2个日期提供两行。 请帮忙。
答案 0 :(得分:0)
select *
from sales_data today
, sales_data ystd
where today.area= ystd.area(+)
and trunc(today.date_column, 'DD') = trunc(SYSDATE, 'DD')
and trunc(ystd.date_column(+), 'DD') = trunc(SYSDATE-1,'DD')
修改强>
SELECT *
FROM (
SELECT
date_column
, Area
, Total
, Sales
, Obj1
, LEAD( Total) over (partition by area order by date_column DESC)
, LEAD( Sales) over (partition by area order by date_column DESC)
, LEAD( Obj1 ) over (partition by area order by date_column DESC)
FROM sales
WHERE trunc(date_column,'DD') = trunc(SYSDATE-1, 'DD')
OR trunc(date_column, 'DD') = trunc(SYSDATE, 'DD')
)
WHERE trunc(date_column, DD) = trunc(SYSDATE - 1, 'DD')
答案 1 :(得分:0)
**请注意我不完全确定此声明是否与oracle 100%兼容,但总体结构应该相同
SELECT tblToday.Date, tblToday.Area, tblToday.Total, tblToday.Sales, tblToday.Obj1, tblToday.Obj2, tblToday.Obj3, tblToday.Obj4,tblYesterday.Total AS PrevDayTotal, tblYesterday.Obj AS PrevObj1, tblYesterday.Obj2 as PrevObj2, tblYesterday.Obj3 AS PrevObj3,tblYesterday.Obj4 AS PrevObj4
FROM table tblToday LEFT OUTER JOIN
table tblYesterday ON DateADD(day,-1,tblToday.Date) = tblYesterday.Date AND tblToday.Area = tblYesterday.Area
在where子句中指定tblToday.Date,即tblToday.Date = GETDATE()
答案 2 :(得分:0)
我知道这不符合性能观点以及数据库架构中的标记。
但是它应该在你的提取中提供你想要的输出......
select t1.Area, t1.Total_Sales as "Total sales", t2.*
from (select area, sum(total_sales) total_sales
from sales_data
group by area) t1,
(select i_t_1.Obj1,
i_t_1.Obj2,
i_t_1.Obj3,
i_t_1.Obj4,
nvl(i_t_2.Total_Sales, 0) PrvDyTtl,
nvl(i_t_2.obj1, 0) PrvObj1,
nvl(i_t_2.Obj2, 0) PrvObj2,
nvl(i_t_2.Obj3, 0) PrvObj3,
nvl(i_t_2.Obj4, 0) PrvObj4
from sales_data i_t_1, sales_data i_t_2
where i_t_1.area = i_t_2.area(+)
and trunc(i_t_1.date)= trunc(SYSDATE)
and trunc(i_t_2.date(+)) = trunc(SYSDATE - 1)) t2
where t2.area = t1.area;
我认为表名是sales_data之前检查这只是将sales_data中的表名替换为你想要的table_name。