2014-10-16 6 views
-1

Пожалуйста, помогите мне в проблеме, связанной с SUM, AVG, MTD SUM об обнаружении объема масла, проходящего через метры в помещениях.Ежедневная сумма, месяц до даты, MTD Средн., Месяц месяцев назад

Скажет, есть два Услуг

  1. Севера - имеющие метров N1, N2
  2. Юга - имеющие метры S1, S2

Существует ежедневный поток через метр. Таблица FACILITY_OIL выглядит следующим образом -

TimeStamp----------Facility----------Meter----------OilVolume 

10-SEP-2014 | NORTH  | N1  |  100 

10-SEP-2014 | NORTH  | N2  |  200 

10-SEP-2014 | SOUTH  | S1  |  300 

10-SEP-2014 | SOUTH  | S2  |  400 


10-OCT-2014 | NORTH  | N1  |  100 

10-OCT-2014 | NORTH  | N2  |  200 

10-OCT-2014 | SOUTH  | S1  |  300 

10-OCT-2014 | SOUTH  | S2  |  400 

11-OCT-2014 | NORTH  | N1  |  400 

11-OCT-2014 | NORTH  | N2  |  300 

11-OCT-2014 | SOUTH  | S1  |  200 

11-OCT-2014 | SOUTH  | S2  |  100 

12-OCT-2014 | NORTH  | N1  |  100 

12-OCT-2014 | NORTH  | N2  |  200 

12-OCT-2014 | SOUTH  | S1  |  300 

12-OCT-2014 | SOUTH  | S2  |  400 

Я должен найти следующие сгруппированные по объекту:

  1. Сумма нефти Объем через все метры в фонд на данный день.
  2. Месяц до даты Сумма объема масла в метрах.
  3. Среднее значение МПД нефти Объем
  4. Предыдущий месяц Среднее Нефтяного Объем

Вывод должен выглядеть так на 12-ОКТ

Facility-----DailySum-----MTD_Sum-----MTD_Avg-----Prev_Month_Avg 

NORTH | 300  | 1300 | 108.33 | 10 

SOUTH | 700  | 1700 | 141.66 | 23.33 

Here for NORTH on 12-OCT, 

DailySum = (N1+N2) 

MTD SUM = (N1 + N2) from 01-Oct to 12-Oct 

MTD_Avg = MTD_SUM/12days 

Pre_Month_Avg = (100+200)/30 

Можно ли выход в том же формате. Мои ограничения - я не могу использовать SP. Это должно быть с точки зрения.

Я пробовал использовать группу, но не смог ее достичь. Буду признателен за любую оказанную помощь. Благодаря тонну!


Благодарим за помощь!

Кажется, что идеально подходит для одного дня. Я смог использовать ваш запрос.

Я добавил «с rollup», чтобы получить сумму в конце. Однако теперь требование изменилось, чтобы получить набор данных для каждого дня. Так оно и должно выглядеть следующим образом:

Timestamp--Facility--DailySum--MTD_Sum--MTD_Avg--Prev_Month_Avg 
10-Oct | NORTH | 300 | 1300 | 108.33 | 10 
10-Oct | SOUTH | 700 | 1700 | 141.66 | 23.33 
10-Oct | TOTAL | 1000| 3000 | 249.99 | 33.33 

12-Oct | NORTH | 300 | 1300 | 108.33 | 10 
12-Oct | SOUTH | 700 | 1700 | 141.66 | 23.33 
12-Oct | TOTAL | 1000| 3000 | 249.99 | 33.33 

Я попытался модифицированный запрос из ваш-

select case when null then 'TOTAL' else Facility end as 'Facility' 
,sum(case when [TimeStamp]>=dateadd(dd,datediff(dd,0,getdate()),0) then OilVolume else 0 end) as DailySum 
,sum(case when [TimeStamp]>=dateadd(mm,datediff(mm,0,getdate()),0) then OilVolume else 0 end) as MTD_Sum 
,sum(case when [TimeStamp]>=dateadd(mm,datediff(mm,0,getdate()),0) then OilVolume else 0 end)/datepart(dd,getdate()) as MTD_Avg 
,sum(case when [TimeStamp]>=dateadd(mm,datediff(mm,0,getdate()),0) then 0 else OilVolume end)/datepart(dd,dateadd(dd,datepart(dd,getdate())*-1,getdate())) as Prev_Month_Avg 
from yourtable 
where [TimeStamp]>=dateadd(mm,datediff(mm,0,getdate())-1,0) 
group by Timestamp, Facility with rollup 

Это не похоже на работу с простой группой по. Я не уверен, как получить повторяющийся результат за один день. Я не могу использовать CURSOR или loop n view. Пожалуйста, помогите с этим. Благодаря!

ответ

0

Я хотел бы использовать случай для того

select 
sum(case when timestamp = '12-OCT-2014' then meter + oilVolume else 0 end), 
sum(case when timestamp between '01-OCT-2014' and '12-OCT-2014' then meter + volume else 0 end), 
sum(case when timestamp between '01-OCT-2014' and '12-OCT-2014' then meter + volume else 0 end)/datediff("dd",'01-OCT-2014' , '12-OCT-2014'), 
sum(case when timestamp between '01-SEP-2014' and '30-SEP-2014' then meter + volume else 0 end)/datediff("dd",'01-SEP-2014' , '30-SEP-2014') 
from ... 

вы могли бы изменить дату с параметрами.

+0

Спасибо за помощь! Я не знал, что SUM можно использовать так умно. Когда я добавляю предложение group by к вашему запросу, он работает так, как ожидалось! – proxy

Смежные вопросы