2016-01-06 3 views
1

Пожалуйста, помогите мне решить эту проблему. Я должен написать запрос, чтобы получить сумму значений предыдущего месяца и значений текущего месяца, но не смог получить решение.Как суммировать значения предыдущего месяца и значения текущего месяца в SQL-запросе

Вот изображение для вашей ссылочной суммы фактических значений столбца. Мне нужен результат.

enter image description here

+0

вы хотите сделать это в Tableau или SQL? В Таблице мы можем достичь этого легко. – minatverma

+0

Пожалуйста, дайте мне решение в Tableau. –

+0

Исследование 'group by rollup' –

ответ

0

В Oracle вы будете использовать следующее, может быть не совсем правильно на сазе:

Select 
     Site, 
     sum(value * (case (date_transaction > trunc(sysdate, 'MM') then 1 else 0 end)) 
     volume_current_month 
    from myTable 
    where date_transaction between add_months(trunc(sysdate,'MM'),-1) and sysdate 
    group by site 

В прошлом месяце более или менее то же самое, используя другое заявление дела и ADD_MONTHS.

+0

Трудно получить форматирование правильно, даже с подсказками. Сожалею. –

+0

Обычно это будет 'CASE WHEN', но, возможно, Oracle это принимает? – Lennart

+0

Спасибо за ваш ответ, я попробую. –

0

Есть два способа сделать это в Tableau:

Первый способ.

Under Analysis --> Total --> Add All SubTotals . 

Второй способ:

Создать поле известково Total_event как:

WINDOW_SUM(SUM([Event Count])) 

вычислим Window_sum в COMPUTE USING EVENT NAME.

+0

Я попробовал это, но результат не ожидается. Пожалуйста, обратитесь к ссылке - «https://community.tableau.com/», я запросил проблемы в таблице, пожалуйста, проверьте вопрос: «Как найти отличие от предыдущий месяц на каждом сайте « –

+0

Мне нужна только фактическая сумма счета или разница с текущим месяцем и предыдущим месяцем. –

+0

@ KannanAthmanathan Какой результат вы получаете? Я получаю желаемый результат согласно вашему требованию. Вы можете поделиться ссылкой на свою проблему. – minatverma

0

В таблицы -> Создать вычисляемое поле ->

// Это за предыдущий месяц

if [date] >= DATE("01" +"-" + (Month(TODAY())-1) +"-" + YEAR(TODAY())) 

and [date] <= DATE("31" +"-" + (Month(TODAY())-1) +"-" + YEAR(TODAY())) 

//if the month has 30 or 28 days it will check that there is no 31 and return null 

then 

sum([Value]) 

end 

// Для текущего месяца ->

if Month([date]) = Month(TODAY()) then 

sum([Value]) 

end 

Вы будете 2 поля возвращая сумму предыдущего месяца и сумму текущего месяца, вы можете использовать их по своему усмотрению.

В SQL конце концов вы можете использовать

за предыдущий месяц ->

select sum(value) from table_name t where DATE_PART('month',t.date)=DATE_PART('month',TIMESTAMPADD(mm,-1,GETDATE())) 

Для текущего месяца ->

select sum(value) from table_name t where DATE_PART('month',t.date)=DATE_PART('month',GETDATE())) 
0

Если вы можете использовать SQL и вы действительно нуждаетесь в предыдущем месяце и не только все месяцы, суммированные EventName, тогда вы можете использовать LAG. Я сделал предположение о том, что вы суммирующий по EventName, и вы хотите только текущий именем_события и предыдущий именем_события

WITH Summed 
AS 
(
SELECT * , 
LAG(EventCount) OVER (Partition BY EventName ORDER BY trialmonth) as PrevEvent 
FROM dbo.Table1 
) 

    SELECT *, 
    SUM(PrevEvent+EventCount) AS SummedCount 

    FROM summed 
    GROUP BY Site 
      ,TrialMonth 
      ,EventName 
      ,EventCount 
      , PrevEvent 

Это будет производить такой вывод

Site TrialMonth EventName EventCount PrevEvent SummedCount 
12101 2001-10-15 Actual Count 4 NULL NULL 
12101 2001-10-15 Projected Count 8 NULL NULL 
12101 2001-11-15 Actual Count 6 4 10 
12101 2001-11-15 Projected Count 9 8 17 
12101 2001-12-15 Actual Count 0 6 6 
12101 2001-12-15 Projected Count 10 9 19 

http://sqlfiddle.com/#!6/8253f0/2