Невозможно получить данные за день и отобразить все данные, извлеченные из таблицы - PullRequest
2 голосов
/ 31 мая 2011

У меня есть таблица с данными о продажах для нескольких мест и дат. например:

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  

Я не могу этого сделать, потому что все, что я пытаюсь сделать, дает мне две строки для двух дат Махараштры. Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 31 мая 2011

** Обратите внимание, я не совсем уверен, что это утверждение на 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

Указание tblToday.Date в предложении where, т.е. tblToday.Date= GETDATE ()

0 голосов
/ 31 мая 2011

Я знаю, что это не на должном уровне как с точки зрения производительности, так и с точки зрения архитектуры базы данных.

но он должен выдавать то, что вы хотите при извлечении ...

 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 на желаемое имя таблицы.

0 голосов
/ 31 мая 2011
    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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...