2015-04-26 2 views
-1

У нас есть таблица с тремя столбцами (Name_of_office, Month, Amount), как показано ниже:Написать Sql запрос

Name_Of_Office  Month  Amount 
------------------------------------ 
DivisionBhopal  04   125 
DivisionBhopal  05   50 
DivisionBhopal  06   100 
DivisionBhopal  10   125 
DivisionSagar  04   600 
DivisionSagar  05   520 
DivisionSagar  06   400 
DivisionSagar  10   100 

Финансовый год Месяц следует использовать для расчета.

По формуле всегда начинайте с апреля до выбранного месяца.

Предположим, пользователь выберет месяц июнь (из ниспадающего)

Расчет должен выполняться как этот

Name_Of_Office  Sum Upto Previous Month Present Month Total Amount 
----------------------------------------------------------------------------------------- 
DivisionBhopa  April + May    June   April + May+ June 
DivisionSagar  April + May    June   April + May+ June 

Здесь мы не будем добавлять ОКТ количество, потому что выбранный месяц июнь мы хотим данные по июнь

в июне месяце, данные должны выглядеть следующим образом:

Name_Of_Office  Sum Upto Previous Month Present Month Total Amount 
--------------------------------------------------------------------------- 
DivisionBhopal   175      100    275 
DivisionSagar   1120      400    1520 

В октябре данные должны выглядеть (если пользователь выбирает декабря):

Name_Of_Office  Sum Upto Previous Month Present Month  Total Amount 
----------------------------------------------------------------------------- 
DivisionBhopal   275      125    400 
Divisionsagar   1520      100    1620 
+1

Что ваш вопрос? –

+0

Для получения наилучших результатов уменьшите свой вопрос до одного конкретного запроса, четко объясните, что вы хотите, и что вы сделали до сих пор, что не работает. –

+0

Добро пожаловать в StackOverflow: если вы отправляете код, XML или образцы данных, *** ПОЖАЛУЙСТА *** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на панели инструментов редактора, чтобы красиво формат и синтаксис выделить его! –

ответ

0

вы можете попробовать это

SELECT A.NAME_OF_OFFICE, B.SUM_UPTO_PREV_MONTH, A.AMOUNT,B.SUM_UPTO_CURR_MONTH 
FROM TEMP A 
INNER JOIN 
(
SELECT NAME_OF_OFFICE, SUM(AMOUNT) SUM_UPTO_PREV_MONTH 
FROM TEMP 
GROUP BY NAME_OF_OFFICE 
WHERE MONTH < 6 
) B ON A.NAME_OF_OFFICE = B.NAME_OF_OFFICE 
INNER JOIN 
(
SELECT NAME_OF_OFFICE, SUM(AMOUNT) SUM_UPTO_CURR_MONTH 
FROM TEMP 
GROUP BY NAME_OF_OFFICE 
WHERE MONTH <= 6 
) C ON A.NAME_OF_OFFICE = C.NAME_OF_OFFICE 
WHERE A.MONTH = 6 
0

Вы можете использовать условные agregations:

select office, 
sum(amount)as total, 
sum(case when month = @passedmonth then amount else 0 end) as present, 
sum(case when month < @passedmonth then amount else 0 end) as prev 
from table 
where month >= 4 and month < @passedmonth 
group by office 
+0

Возможно, вы имели в виду, что ваше условие 'where' должно быть' month> = 4 и month <= @ passmonth' (или просто «месяц между 4 и @ passmonth» для краткости). –

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