2011-05-31 47 views
2

我有一張包含多個地點和日期的銷售數據的表格。 如:無法獲取一天的數據並顯示從表格中獲取的所有數據

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 

我想如下圖所示如這顯示非常久遠的幾列,只有有前幾天的數據,即,爲馬哈拉施特拉邦它應該是一列:

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 

我無法做到這一點,因爲無論我嘗試做什麼給了我兩行馬哈拉施特拉邦的兩個日期。 請幫忙。

回答

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') 
+0

我在聲明結尾處缺少表達式錯誤... – 2011-05-31 06:02:58

+0

@Pranay Suyash:我編輯了我的答案。試試這個select – schurik 2011-05-31 07:05:55

+0

@Pranay Suyash:我也編輯了第一個說法。 – schurik 2011-05-31 07:29:24

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()

0

我知道這是達不到在視圖性能自動點標記以及在數據庫architechure ..

但它應該給你在提取想要的輸出...

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。