Access. Sql подзапросы как сделать??(((

Ainur.sm
Дата: 11.02.2016 18:26:28
SELECT 'Нераспределенная прибыль' AS ПАССИВ, K-S-NV-PD AS [color=blue]Itogo[/color] From qdfPayments
 WHERE K=(Select Sum(IncomeAmount) From qdfPayments WHERE Year(PaymentDate)<2015 And (ManagerPayCalc='Закрыт' And TransactionType='Поступления') )
 And S=(SELECT Sum(PaymentAmount) From qdfPayments WHERE Year(PaymentDate)<2015 And (ManagerPayCalc='Закрыт' And TransactionType='Затраты по заявке'))
 And NV= (Select Sum(PaymentAmount) From qdfPayments WHERE Year(PaymentDate)<2015  And TransactionType='Расходы прочие')
 ANd PD= (SELECT Sum(PaymentAmount)From qdfPayments WHERE Year(PaymentDate)<2015    And TransactionType='Прибыль, дивиденды') 
 -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 = 'Прибыль, дивиденды'))+[color=blue] Itogo[/color] 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 Декабрь
Where Year(PaymentDate)=2015
Akina
Дата: 11.02.2016 18:38:44
А вопрос-то где? И зачем это многоэтажное безобразие - без постановки задачи и структур хранения данных?
Ainur.sm
Дата: 11.02.2016 18:45:36
Akina,
Мне надо чтоб нарастающий итог 2014 г. учитывался в январе 2015г. Итог 2014+ январь 2015.


(-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 Январь
это вычисление на январь месяца 2015 надо прибавить итог 2014 года
Predeclared
Дата: 11.02.2016 18:51:45
Akina
... без постановки задачи ...

Сломать Jet-у моск Определение границ возможностей запросов Jet SQL.
:)
Akina
Дата: 12.02.2016 09:05:02
В рамках именно MS Access считаю наиболее правильным формирование отдельного статического запроса "Итоги за прошлый год". И использование его в запросе в качестве одного из источников данных. А если корректировка таких данных исключена - то и формирование статической таблицы баланса на начало года.
Шыфл
Дата: 12.02.2016 11:55:36
Ainur.sm,

что-то ты не так делаешь, однозначно. Попробуй, что ли, группировку.

SELECT SUM(qdfPayments.IncomeAmount), Month(PaymentDate), Year(PaymentDate)
FROM 
qdfPayments
WHERE (qdfPayments.ManagerPayCalc = 'Закрыт' AND qdfPayments.TransactionType IN ('Поступления','Затраты по заявке')) 
OR (qdfPayments.TransactionType IN ('Расходы прочие','Прибыль, дивиденды')) 
GROUP BY Month(PaymentDate), Year(PaymentDate)
Ainur.sm
Дата: 12.02.2016 12:19:11
Шыфл,

Есть такой вариант. Только
Не правильно считает с июня месяца.

Июнь месяц -300 это не вычитает
SELECT 'Нераспределенная прибыль' AS ПАССИВ,
-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, 
 -IncomeAmount  * (ManagerPayCalc = 'Закрыт' AND TransactionType = 'Поступления')
 +PaymentAmount * (ManagerPayCalc = 'Закрыт' AND TransactionType = 'Затраты по заявке')
 +PaymentAmount * (TransactionType = 'Расходы прочие')
 +PaymentAmount * (ManagerPayCalc = 'Прибыль, дивиденды') AS S,
 Month(PaymentDate) AS M,
 Year(PaymentDate)=2014 AS Y
FROM
 qdfPayments
WHERE Year(PaymentDate)<=2014 And Center IS NOT NULL
Шыфл
Дата: 12.02.2016 12:31:07
Ainur.sm
Шыфл,

Есть такой вариант. Только
Не правильно считает с июня месяца.

Июнь месяц -300 это не вычитает

Это вот значит что? Что у вас июнь месяц отрицательный? Давайте данные, что ли... Может у вас там есть 2012 год или ещё чего...

Ainur.sm
+

SELECT 'Нераспределенная прибыль' AS ПАССИВ,
-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, 
 -IncomeAmount  * (ManagerPayCalc = 'Закрыт' AND TransactionType = 'Поступления')
 +PaymentAmount * (ManagerPayCalc = 'Закрыт' AND TransactionType = 'Затраты по заявке')
 +PaymentAmount * (TransactionType = 'Расходы прочие')
 +PaymentAmount * (ManagerPayCalc = 'Прибыль, дивиденды') AS S,
 Month(PaymentDate) AS M,
 Year(PaymentDate)=2014 AS Y
FROM
 qdfPayments
WHERE Year(PaymentDate)<=2014 And Center IS NOT NULL
)



Может всё-таки группировать?
+

SELECT 'Нераспределенная прибыль' AS ПАССИВ,
-SUM(S*(NOT Y)) AS Итог_2014,
 SUM(S*(M<=1)) AS Январь,
 SUM(S*(M<=2)) AS Февраль, 
 SUM(S*(M<=3)) AS Март, 
 SUM(S*(M<=4)) AS Апрель, 
 SUM(S*(M<=5)) AS Май, 
 SUM(S*(M<=6)) AS Июнь, 
 SUM(S*(M<=7)) AS Июль, 
 SUM(S*(M<=8)) AS Август, 
 SUM(S*(M<=9)) AS Сентябрь, 
 SUM(S*(M<=10)) AS Октябрь, 
 SUM(S*(M<=11)) AS Ноябрь, 
 SUM(S*(M<=12)) AS Декабрь
FROM
(SELECT Center,
 SUM(
 -IncomeAmount  * (ManagerPayCalc = 'Закрыт' AND TransactionType = 'Поступления')
 +PaymentAmount * (ManagerPayCalc = 'Закрыт' AND TransactionType = 'Затраты по заявке')
 +PaymentAmount * (TransactionType = 'Расходы прочие')
 +PaymentAmount * (ManagerPayCalc = 'Прибыль, дивиденды')
) AS S,
 Month(PaymentDate) AS M,
 Year(PaymentDate)=2014 AS Y
FROM
 qdfPayments
WHERE Year(PaymentDate)<=2014 And Center IS NOT NULL
GROUP BY Center,
)
Ainur.sm
Дата: 12.02.2016 16:19:02
Шыфл, НЕ выходит. И ошибка при загрузке БД.
Ainur.sm
Дата: 12.02.2016 16:32:48
Ainur.sm,