Пожалуйста, помогите мне в проблеме, связанной с SUM, AVG, MTD SUM об обнаружении объема масла, проходящего через метры в помещениях.Ежедневная сумма, месяц до даты, MTD Средн., Месяц месяцев назад
Скажет, есть два Услуг
- Севера - имеющие метров N1, N2
- Юга - имеющие метры 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
Я должен найти следующие сгруппированные по объекту:
- Сумма нефти Объем через все метры в фонд на данный день.
- Месяц до даты Сумма объема масла в метрах.
- Среднее значение МПД нефти Объем
- Предыдущий месяц Среднее Нефтяного Объем
Вывод должен выглядеть так на 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. Пожалуйста, помогите с этим. Благодаря!
Спасибо за помощь! Я не знал, что SUM можно использовать так умно. Когда я добавляю предложение group by к вашему запросу, он работает так, как ожидалось! – proxy