powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
25 сообщений из 41, страница 1 из 2
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39167606
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
за 2014
Center -----январь---Февраль--Итого
Машина------200------400--------400
за 2015 должен + итог 2014 год
Center -----январь---------Февраль-----------------------------Итого
Машина------400+200------400+200+400=1000
ВЫШЛА ОШИБКА!!!! КАК решить проблему??
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT Center, -SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 1)) + Итого AS Январь, 
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 2)) + Январь AS Февраль,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 3))+ Февраль AS Март,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 4))+ Март AS Апрель,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 5))+ Апрель AS Май,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 6))+ Май AS Июнь,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 7))+ Июнь AS Июль,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 8))+ Июль AS Август,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 9))+ Август AS Сентябрь,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 10))+ Сентябрь AS Октябрь,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 11))+ Октябрь AS Ноябрь, 
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 12))+ Ноябрь AS Декабрь, Декабрь AS Итого
FROM qdfPayments WHERE Year(PaymentDate) <=2015  AND Center<>''  
GROUP BY Center
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39167688
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ainur.sm,
нельзя повторять имя
Код: sql
1.
2.
SELECT Center,
 -SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 1)) + Итого AS Январь_1, 
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39167692
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ainur.sm,

Код: sql
1.
2.
3.
4.
SELECT Center, -SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 1)) + Итого AS Январь1, 
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 2)) + Январь1 AS Февраль1,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 3))+ Февраль1 AS Март1,
-SUM(qdfPayments.IncomePaymentSumCalc * (Month(PaymentDate) = 4))+ Март1 AS Апрель1,
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39167709
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,
В чем ошибка?
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39167740
В выражениях запроса можно использовать имена вычисляемых полей, расположенных левее, а у вас в поле "Январь" используется "Итого", расположенное гораздо правее, потому и ошибка.
К тому же, с чего вы взяли, что ваше "Итого" (оно же "Декабрь") будет за 2014 г.? Как по мне, при WHERE Year(PaymentDate) <=2015 во всех ваших выражениях будут суммироваться все значения соответствующего месяца за все годы.
Может вам нужно так?:
Код: plsql
1.
2.
3.
4.
...
-SUM(qdfPayments.IncomePaymentSumCalc * (PaymentDate <= #2015/01/01#)) AS Январь, 
-SUM(qdfPayments.IncomePaymentSumCalc * (PaymentDate <= #2015/02/01#)) AS Февраль,
...


Кстати, если поле PaymentDate индексировано и записей много, то вместо:
WHERE Year(PaymentDate) <=2015
лучше применить (быстрее работает):
WHERE PaymentDate <= #2015/12/31#
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39167749
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),

нет..... год потом в фильтре вводятся.
для примера я взяла 2015 год


Код: sql
1.
2.
3.
SELECT Center, SUM(qdfPayments.IncomePaymentSumCalc)  FROM qdfPayments
 WHERE Year(PaymentDate)<=2015 AND Center<>''  
GROUP BY Center


нахождение итого
мне надо + Январь

Код: sql
1.
2.
3.
4.
Select Center, (SUM(qdfPayments.IncomePaymentSumCalc *( -(Month(PaymentDate) = 1))) + (SELECT Center, SUM(qdfPayments.IncomePaymentSumCalc)  FROM qdfPayments
 WHERE Year(PaymentDate)<=2015 AND Center<>''  
GROUP BY Center) ) AS Январь   FROM qdfPayments WHERE  Year(PaymentDate) <= 2015 AND Center<>'' 
GROUP BY Center
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39167882
Вообще-то этот вопрос и пример из другой вашей ветки...
Подчиненный запрос, используемый в разделе перечисления полей (между SELECT и FROM) должен возвращать только одно поле и только одну запись. У вас же два поля и несколько записей. Потому и ошибка.
Вам нужно включить подзапрос в раздел FROM в качестве второго источника и связать его по Center с qdfPayments.
Кстати, вы уверены, что в подзапросе условие <=2015 правильное? Может нужно <2015?

В моем предыдущем ответе сумма по каждому месяцу учитывается с накоплением за весь предыдущий период по этот месяц включительно. Вроде то, что вам нужно. И подзапрос не нужен.
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168035
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
мне нужно чтоб Итог до 2015 года +январь за 2015 года.
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168090
Ainur.smАнатолий ( Киев ),
мне нужно чтоб Итог до 2015 года +январь за 2015 года.

так можно
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT Center, 
-SUM(S*(NOT Y)) AS Итог_2014,
 SUM(S*(M=1)*Y)+Итог_2014 AS Январь,
 SUM(S*(M=2)*Y)+Январь AS Февраль, 
 SUM(S*(M=3)*Y)+Февраль AS Март, 
 SUM(S*(M=4)*Y)+Март AS Апрель, 
 SUM(S*(M=5)*Y)+Апрель AS Май, 
 SUM(S*(M=6)*Y)+Май AS Июнь, 
 SUM(S*(M=7)*Y)+Июнь AS Июль, 
 SUM(S*(M=8)*Y)+Июль AS Август, 
 SUM(S*(M=9)*Y)+Август AS Сентябрь, 
 SUM(S*(M=10)*Y)+Сентябрь AS Октябрь, 
 SUM(S*(M=11)*Y)+Октябрь AS Ноябрь, 
 SUM(S*(M=12)*Y)+Ноябрь AS Декабрь
 
FROM
(SELECT Center, IncomePaymentSumCalc AS S, Month(PaymentDate) AS M, Year(PaymentDate)=2015 AS Y
 FROM qdfPayments WHERE Year(PaymentDate)<=2015 And Center IS NOT NULL)
 
GROUP BY Center
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168300
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,
Спасибо! Только вопрос после компиляции выводит это [%$##@_A]
почему ? можно ли заменить это?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT Center, -SUM(S * (NOT Y)) AS Итог_2014, SUM(S * (M=1) * Y) + Итог_2014 AS Январь, 
SUM(S * (M=2) * Y) + Январь AS Февраль, SUM(S * (M=3) * Y) + Февраль AS Март, 
SUM(S * (M=4) * Y) + Март AS Апрель, SUM(S * (M=5) * Y) + Апрель AS Май, 
SUM(S * (M=6) * Y) + Май AS Июнь, SUM(S * (M=7) * Y) + Июнь AS Июль, 
SUM(S * (M=8) * Y) + Июль AS Август, SUM(S * (M=9) * Y) + Август AS Сентябрь, 
SUM(S * (M=10) * Y) + Сентябрь AS Октябрь, SUM(S * (M=11) * Y) + Октябрь AS Ноябрь, 
SUM(S * (M=12) * Y) + Ноябрь AS Декабрь
FROM [SELECT Center, IncomePaymentSumCalc AS S, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And Center IS NOT NULL]. AS[color=red] [%$##@_A][/color]
GROUP BY Center;
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168363
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,
Надо сделать тоже самое только здесь присутствует ("-" и "+") И условия
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
UNION ALL
SELECT 'Нераспределенная прибыль' AS ПАССИВ, 
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate) = 1 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=1 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=1 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=1 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) AS Январь,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=2 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=2 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=2 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=2 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Январь AS Февраль,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=3 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=3 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=3 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=3 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Февраль AS Март,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=4 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=4 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=4 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=4 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Март AS Апрель,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=5 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=5 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=5 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=5 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Апрель AS Май,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=6 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=6 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=6 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=6 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Май AS Июнь,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=7 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=7 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=7 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=7 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Июнь AS Июль,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=8 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=8 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=8 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=8 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Июль AS Август,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=9 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=9 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=9 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=9 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Август AS Сентябрь,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=10 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=10 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=10 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=10 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Сентябрь AS Октябрь,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=11 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=11 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=11 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=11 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Октябрь AS Ноябрь,
-SUM(qdfPayments.IncomeAmount * (Month(PaymentDate)=12 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Поступления'))
+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=12 AND qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType = 'Затраты по заявке'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=12 AND qdfPayments.TransactionType = 'Расходы прочие'))+SUM(qdfPayments.PaymentAmount * (Month(PaymentDate)=12 AND qdfPayments.TransactionType = 'Прибыль, дивиденды')) + Ноябрь AS Декабрь, Декабрь AS Итого
FROM qdfPayments
WHERE qdfPayments.PaymentDate <= <FILTER1> 


попробовала сделать итог 2014 года и январь 2015

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
 
  SELECT 'Нераспределенная прибыль' AS ПАССИВ, 
  -SUM(S2  * Y AND CL = 'Закрыт' AND  T= 'Поступления')
+SUM(P  * Y AND CL = 'Закрыт' AND T = 'Затраты по заявке')+SUM(P * Y AND T = 'Расходы прочие')+SUM(P * Y AND CL = 'Прибыль, дивиденды')
-SUM(S2 * (NOT Y)) AS Итог_2014, 
 SUM(S2 * (M=1) * Y AND CL = 'Закрыт' AND  T= 'Поступления')
+SUM(P * (M=1 )* Y AND CL = 'Закрыт' AND T = 'Затраты по заявке')+SUM(P * (M)=1 * Y AND T = 'Расходы прочие')+SUM(P * (M)=1* Y  AND CL = 'Прибыль, дивиденды') AS Январь
FROM [SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y, ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And Center IS NOT NULL]. AS [% $ # # @_A] 
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168409
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Результаты 0,0,0.
В чем проблема??
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 'Нераспределенная прибыль' AS ПАССИВ, 
  -SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления'))
  	+SUM(P  * (NOT Y) AND (CL = 'Закрыт' AND T = 'Затраты по заявке'))  +SUM(P * (NOT Y) AND (T = 'Расходы прочие'))+SUM(P * (NOT Y) AND (CL = 'Прибыль, дивиденды')) AS Итог_2014, 
 SUM(S2 * ((M=2) * Y) AND CL = 'Закрыт' AND  T= 'Поступления')
+SUM(P * (M=2 )* Y AND CL = 'Закрыт' AND T = 'Затраты по заявке')+SUM(P * (M)=2 * Y AND T = 'Расходы прочие')+SUM(P * (M)=2* Y  AND CL = 'Прибыль, дивиденды') AS Январь,

SUM(S2 * ((M=2) * Y) AND CL = 'Закрыт' AND  T= 'Поступления')
+SUM(P * (M=2 )* Y AND CL = 'Закрыт' AND T = 'Затраты по заявке')+SUM(P * (M)=2 * Y AND T = 'Расходы прочие')+SUM(P * (M)=2* Y  AND CL = 'Прибыль, дивиденды') + Январь As Февраль

FROM [SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y, ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And  Center IS NOT NULL]. AS [% $ # # @_A]

Ainur.sm,
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168546
Ainur.smнепоймучка,
Спасибо! Только вопрос после компиляции выводит это [%$##@_A]
почему ? можно ли заменить это? нельзя, так работает построитель запросов,
он вообще не особо стремится сохранить авторский формат SQL-текста.

вообще перед публикацией на форуме лучше позаботиться и форматировать тексты вручную,
иначе для особо длинных запросов сложно читать "стену текста"
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168601
во-первых:

Ainur.sm попробовала сделать итог 2014 года и январь 2015
Код: plsql
1.
2.
3.
4.
5.
6.
...
FROM 
[SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y, 
 ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And Center IS NOT NULL]. AS [% $ # # @_A] 
...


теперь смотрим, что я выше написал (для того же самого периода) - и сравниваем
непоймучкаAinur.smмне нужно чтоб Итог до 2015 года +январь за 2015 года так можно
Код: sql
1.
2.
3.
4.
5.
...
FROM
(SELECT Center, IncomePaymentSumCalc AS S, Month(PaymentDate) AS M, Year(PaymentDate)=2015 AS Y
 FROM qdfPayments WHERE Year(PaymentDate)<=2015 And Center IS NOT NULL)
...

обратите на выделенные с запросах значения ГОДА и ответьте себе:

с какого перепугу ваш запрос будет что-то делать на "январь 2015",
если в вашем варианте условие (<=2014) вообще исключает записи 2015 года?

ваш запрос (в лучшем случае - т.е. если бы там не было иных ошибок и он сработал)
посчитал бы вам итог 2013 года и январь 2014
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168621
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,
Спасибо. я разобралась. Теперь мне надо рассчитать "Нераспределенная прибыль" где присутствует условия.....

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Результаты -1,0,0. 
В чем проблема??
SELECT 'Нераспределенная прибыль' AS ПАССИВ, 
  -SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления'))
  	+SUM(P  * (NOT Y) AND (CL = 'Закрыт' AND T = 'Затраты по заявке'))  +SUM(P * (NOT Y) AND (T = 'Расходы прочие'))+SUM(P * (NOT Y) AND (CL = 'Прибыль, дивиденды')) AS Итог_2014, 
 SUM(S2 * ((M=2) * Y) AND CL = 'Закрыт' AND  T= 'Поступления')
+SUM(P * (M=2 )* Y AND CL = 'Закрыт' AND T = 'Затраты по заявке')+SUM(P * (M)=2 * Y AND T = 'Расходы прочие')+SUM(P * (M)=2* Y  AND CL = 'Прибыль, дивиденды') AS Январь,

SUM(S2 * ((M=2) * Y) AND CL = 'Закрыт' AND  T= 'Поступления')
+SUM(P * (M=2 )* Y AND CL = 'Закрыт' AND T = 'Затраты по заявке')+SUM(P * (M)=2 * Y AND T = 'Расходы прочие')+SUM(P * (M)=2* Y  AND CL = 'Прибыль, дивиденды') + Январь As Февраль

FROM [SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y, ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And  Center IS NOT NULL]. AS [% $ # # @_A]
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168675
Ainur.smнепоймучка,
Спасибо. я разобралась. Теперь мне надо рассчитать "Нераспределенная прибыль" где присутствует условия.....

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Результаты -1,0,0. 
В чем проблема??
SELECT 'Нераспределенная прибыль' AS ПАССИВ, 
  -SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления'))
  	+SUM(P  * (NOT Y) AND (CL = 'Закрыт' AND T = 'Затраты по заявке'))  +SUM(P * (NOT Y) AND (T = 'Расходы прочие'))+SUM(P * (NOT Y) AND (CL = 'Прибыль, дивиденды')) AS Итог_2014, 
 SUM(S2 * ((M=2) * Y) AND CL = 'Закрыт' AND  T= 'Поступления')
+SUM(P * (M=2 )* Y AND CL = 'Закрыт' AND T = 'Затраты по заявке')+SUM(P * (M)=2 * Y AND T = 'Расходы прочие')+SUM(P * (M)=2* Y  AND CL = 'Прибыль, дивиденды') AS Январь,

SUM(S2 * ((M=2) * Y) AND CL = 'Закрыт' AND  T= 'Поступления')
+SUM(P * (M=2 )* Y AND CL = 'Закрыт' AND T = 'Затраты по заявке')+SUM(P * (M)=2 * Y AND T = 'Расходы прочие')+SUM(P * (M)=2* Y  AND CL = 'Прибыль, дивиденды') + Январь As Февраль

FROM [SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y, ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And  Center IS NOT NULL]. AS [% $ # # @_A]


чтобы понять проблему, вам надо ЯСНО понимать, что вы тут написали
у вас тут где-то -SUM, а где-то +SUM - вы понимаете, почему именно так?
вы ясно понимаете, КАК работают написанные там выражения?

если нет, то чтобы понять из чего "сложился" ваш 0
исследуйте для начала в запросе сумму, из которой складывается этот столбец:
Код: vbnet
1.
2.
3.
4.
5.
6.
SELECT 'Нераспределенная прибыль' AS ПАССИВ, 
-SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления'))
+SUM(P  * (NOT Y) AND (CL = 'Закрыт' AND T = 'Затраты по заявке'))
+SUM(P * (NOT Y) AND (T = 'Расходы прочие'))
+SUM(P * (NOT Y) AND (CL = 'Прибыль, дивиденды')) AS Итог_2014,
...


напишите это в виде отдельных слагаемых столбцов:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
SELECT 'Нераспределенная прибыль' AS ПАССИВ, 
-SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления')) AS F1,
+SUM(P  * (NOT Y) AND (CL = 'Закрыт' AND T = 'Затраты по заявке')) AS F2,
+SUM(P * (NOT Y) AND (T = 'Расходы прочие')) AS F3,
+SUM(P * (NOT Y) AND (CL = 'Прибыль, дивиденды')) AS F4,
F1+F2+F3+F4 AS Итог_2014, 
...


и посмотрите результат, который дает вам каждое слагаемое вашего выражения -
возможно, что-то прояснится
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168709
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,вышли 0 0 0

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
 SELECT 'Нераспределенная прибыль' AS ПАССИВ, 
-SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления')) AS F1,
-SUM(P  * (NOT Y) AND (CL = 'Закрыт' AND T = 'Затраты по заявке')) AS F2,
-SUM(P * (NOT Y) AND (T = 'Расходы прочие')) AS F3,
-SUM(P * (NOT Y) AND (CL = 'Прибыль, дивиденды')) AS F4,
F1-F2-F3-F4 AS Итог_2014,
FROM [SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y, ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And  Center IS NOT NULL]. AS [% $ # # @_A]
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168801
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ainur.sm,

может надо

Код: sql
1.
-SUM(iif(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления'),0) AS F1,
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168811
Ainur.smнепоймучка,вышли 0 0 0

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
 SELECT 'Нераспределенная прибыль' AS ПАССИВ, 
-SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления')) AS F1,
-SUM(P  * (NOT Y) AND (CL = 'Закрыт' AND T = 'Затраты по заявке')) AS F2,
-SUM(P * (NOT Y) AND (T = 'Расходы прочие')) AS F3,
-SUM(P * (NOT Y) AND (CL = 'Прибыль, дивиденды')) AS F4,
F1-F2-F3-F4 AS Итог_2014,
FROM [SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y, ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And  Center IS NOT NULL]. AS [% $ # # @_A]

ну тогда одно из двух:

1) либо у вас нет записей, удовлетоворяющих указанным критериям в WHERE
2) либо записи есть, но все суммируемые значения (которые дает выражение внутри SUM)
получаются нулевыми (например, из-за того что логический критерий-множитель нулевой)

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

Для того чтобы понять почему "вышли 0 0 0", предлагаю вам еще более углубиться в суть вашего
вашего выражения и рассмотреть - чему равны значения отдельных частей суммируемого значения,
например для первой формулы (F1)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
 "S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления')" AS Формула,
 S2,
 (NOT Y) AS NOT_Y,
 (CL = 'Закрыт') AS CL_Закрыт,
 (T= 'Поступления') AS T_Поступления,
 S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления') AS Суммируемое_значение
FROM
(SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y,
 ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And  Center IS NOT NULL)


посмотрите на результат, возможно, что-то прояснится
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168888
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168924
Ainur.sm,

ну вот, ваша картинка демонстрирует причину вашего нуля в сумме - как и было сказано чуть выше:
непоймучкалибо записи есть, но все суммируемые значения (которые дает выражение внутри SUM)
получаются нулевыми (например, из-за того что логический критерий-множитель нулевой )А именно: множитель (NOT Y), который во всех записях у вас равен нулю, в итоге и обнуляет всю сумму.
Понятна причина?

Если по-прежнему нет, то идем дальше вглубь смысла вашей формулы.
Что же означает этот множитель (NOT Y), который вы использовали например вот в этой формуле вашего запроса:
Код: sql
1.
2.
3.
4.
5.
SELECT -SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления')) AS F1 
FROM 
(SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y,
 ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And  Center IS NOT NULL)


Можете пояснить, какой логический смысл имеют значения этого (NOT Y)?
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168932
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучкаAinur.sm,

ну вот, ваша картинка демонстрирует причину вашего нуля в сумме - как и было сказано чуть выше:
непоймучкалибо записи есть, но все суммируемые значения (которые дает выражение внутри SUM)
получаются нулевыми (например, из-за того что логический критерий-множитель нулевой )А именно: множитель (NOT Y), который во всех записях у вас равен нулю, в итоге и обнуляет всю сумму.
Понятна причина?

Если по-прежнему нет, то идем дальше вглубь смысла вашей формулы.
Что же означает этот множитель (NOT Y), который вы использовали например вот в этой формуле вашего запроса:
Код: sql
1.
2.
3.
4.
5.
SELECT -SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления')) AS F1 
FROM 
(SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y,
 ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And  Center IS NOT NULL)


Можете пояснить, какой логический смысл имеют значения этого (NOT Y)?


>>>Year(PaymentDate)=2014 AS Y<<< здесь расчет за январь месяц 2014 года
>>>Year(PaymentDate)<2014<<< Итог до 2014 год
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168933
Ainur.sm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ainur.smнепоймучкаAinur.sm,

ну вот, ваша картинка демонстрирует причину вашего нуля в сумме - как и было сказано чуть выше:
пропущено...
А именно: множитель (NOT Y), который во всех записях у вас равен нулю, в итоге и обнуляет всю сумму.
Понятна причина?

Если по-прежнему нет, то идем дальше вглубь смысла вашей формулы.
Что же означает этот множитель (NOT Y), который вы использовали например вот в этой формуле вашего запроса:
Код: sql
1.
2.
3.
4.
5.
SELECT -SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления')) AS F1 
FROM 
(SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y,
 ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And  Center IS NOT NULL)


Можете пояснить, какой логический смысл имеют значения этого (NOT Y)?


>>>Year(PaymentDate)=2014 AS Y<<< здесь расчет за январь месяц 2014 года
>>>Year(PaymentDate)<2014<<< Итог до 2014 год

(NOT Y) если отчет нужен за 2013 а общий итог до 2013 год нет вообще то он возвращает -SUM(S2 * >>> (-1)<<< And (CL = 'Закрыт' AND T= 'Поступления')) AS F1
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168952
Ainur.smнепоймучкаAinur.sm,

ну вот, ваша картинка демонстрирует причину вашего нуля в сумме - как и было сказано чуть выше:
пропущено...
А именно: множитель (NOT Y), который во всех записях у вас равен нулю, в итоге и обнуляет всю сумму.
Понятна причина?

Если по-прежнему нет, то идем дальше вглубь смысла вашей формулы.
Что же означает этот множитель (NOT Y), который вы использовали например вот в этой формуле вашего запроса:
Код: sql
1.
2.
3.
4.
5.
SELECT -SUM(S2 * (NOT Y) And (CL = 'Закрыт' AND  T= 'Поступления')) AS F1 
FROM 
(SELECT IncomeAmount AS S2, Month(PaymentDate) AS M, Year(PaymentDate)=2014 AS Y,
 ManagerPayCalc AS  CL, TransactionType AS T, PaymentAmount AS P
 FROM qdfPayments WHERE Year(PaymentDate)<=2014 And  Center IS NOT NULL)


Можете пояснить, какой логический смысл имеют значения этого (NOT Y)?


>>>Year(PaymentDate)=2014 AS Y<<< здесь расчет за январь месяц 2014 года
>>>Year(PaymentDate)<2014<<< Итог до 2014 год

Y - это ЛОГИЧЕСКОЕ ПОЛЕ в подзапросе, вычисляемое выражением Year(PaymentDate)=2014 AS Y
логический смысл которого: "Это запись 2014 года"
т.е. для записей 2014 года Y=-1,
а для записей НЕ 2014 года Y=0

соответственно, логический смысл (инверсного) выражения (NOT Y): "Это запись НЕ 2014 года"
а учитывая общий критерий отбора в запросе WHERE Year(PaymentDate)<=2014
в данном случае (NOT Y) означает: "Это запись РАНЕЕ 2014 года"

таким образом, в приведенном выше запросе
Код: vbnet
1.
2.
3.
4.
'выражения вида
SUM(S2*(NOT Y)...) 'суммируют данные РАНЕЕ 2014 года
'а выражения вида
SUM(S2*(Y)...) 'суммируют данные ЗА 2014 год


а поскольку на последнем вашем скрине ясно видно, что у всех записей NOT_Y = 0
это означает, что у вас в исходной таблице НЕТ записей ранее 2014

отсюда и ваши итоговые нули в столбцах сумм на конец 2013
все вполне законно
...
Рейтинг: 0 / 0
Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
    #39168955
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ainur.sm,

я бы написала так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 'Нераспределенная прибыль' AS ПАССИВ,
 -Sum(IIf(CL='Закрыт' And T='Поступления',s2*y,0)) AS F1,
 -Sum(IIf(CL='Закрыт' And T='Затраты по заявке',p*y,0)) AS F2,
 -Sum(IIf(T='Расходы прочие',p*y,0)) AS F3,
 -Sum(IIf(CL='Прибыль, дивиденды',p*y,0)) AS F4,
 F1-F2-F3-F4 AS Итог_2015
FROM (SELECT nz(IncomeAmount,0) AS S2,
 Month(PaymentDate) AS M, Year(PaymentDate)=2015 AS Y,
 "" & ManagerPayCalc AS CL, "" & TransactionType AS T,
 nz(PaymentAmount,0) AS P
 FROM qdfPayments
 WHERE Year(PaymentDate)<=2015 And  Center IS NOT NULL)  AS w
GROUP BY 'Нераспределенная прибыль';
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access. Надо сделать нарастающий итог по месяцам чтобы учитывался за предыдущие года
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]