sum и inner в запросе | |
---|---|
ama68 Автор Сообщений: 5278 Откуда: Кострома Дата регистрации: 27.04.2006 |
Здравствуйте!
Завис насмерть! Видимо, старею. есть 3 таблицы:
Нужно сделать выборку tmpData_2.nSumma и просуммировать, где:
Чтобы получить результат: nYear nSumma 2018 2500 2019 1200 На худой конец: nYear nSumma 2018 200 2018 600 2018 300 2018 800 2018 600 2019 1200 все мозги уже вспотели! Исправлено 1 раз(а). Последнее : ama68, 21.08.20 19:14 |
Re: sum и inner в запросе | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Какие люди!
Из: tmpData_1.cRec_D1 = tmpData.cRec And (tmpData.nYear = 2018 Or tmpData.nYear = 2019) tmpData_2.cRec_D2 = tmpData_1.cRec And tmpData_2.cRec_D2 = 21 есть: соединение таблиц: tmpData_1.cRec_D1 = tmpData.cRec And tmpData_2.cRec_D2 = tmpData_1.cRec фильтр: (tmpData.nYear = 2018 Or tmpData.nYear = 2019) And tmpData_2.cRec_D2 = 21 осталось группировку: GROUP BY tmpData.nYear выражение суммы: SUM(tmpData_2.nSumma) SELECT tmpData.nYear, SUM(tmpData_2.nSumma); FROM tmpData, tmpData_1, tmpData_2; WHERE соединение AND фильтр; GROUP BY группировка; ORDER BY группировка С inner надо тоже самое, но в WHERE соединение перенести в INNER JOIN... |
Re: sum и inner в запросе | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Задача не имеет решения, поскольку связь не однозначная приведена
2018 - a - 21 2019 - c - 21 Т.е. и от 2018 года выходим на код 21 и от 2019 года также выходим на код 21. В результате, в обоих случаях получим одну и ту же сумму. Без каких-то дополнительных ограничений задачу не решить Насколько я понимаю, тут все завязано на порядок следования записей. Но опять же, а в какой момент остановиться? Т.е. вот первые 5 записей с кодом 21 - это 2018 год, а 6-ая запись с кодом 21 - это 2019 год? И почему не надо учитывать 7-ую запись с кодом 21? Почему, собственно? Из приведенных данных это никак не следует |
Re: sum и inner в запросе | |
---|---|
ama68 Автор Сообщений: 5278 Откуда: Кострома Дата регистрации: 27.04.2006 |
Кабы так просто было...
Постоянно выдаёт одно и то же: 2018 4900 2019 4900 Это если использовать SUM А если не использовать, всё-равно на результат нужный не выхожу Запрос такой:
|
Re: sum и inner в запросе | |
---|---|
ama68 Автор Сообщений: 5278 Откуда: Кострома Дата регистрации: 27.04.2006 |
Скажем так:
cRec (значение 'a') - ID записи таблицы tmpData cRec (значение 21) - ID записи таблицы tmpData_1 cRec_D2 (значение 21) - поле связи таблицы tmpData_2 с таблицей tmpData_1 Получается двухступенчатая связь: tmpData -> tmpData_1 как tmpData_1.cRec_D1 = tmpData.cRec tmpData_1 -> tmpData_2 как tmpData_2.cRec_D2 = tmpData_1.cRec |
Re: sum и inner в запросе | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Владимир же написал - у тебя по первой связи получается что подходят записи
('a', 21) ('c', 21) по второй связи к КАЖДОЙ из них подходят ВСЕ записи с cRec_D2=21 естественно результат и должен быть абсолютно одинаковым. Вот если бы по первой связи подходили записи ('a', 21) ('c', 25) то и суммы были бы разные - одна по всем 21-м и другая по всем 25-м. ------------------ WBR, Igor |
Re: sum и inner в запросе | |
---|---|
ama68 Автор Сообщений: 5278 Откуда: Кострома Дата регистрации: 27.04.2006 |
Я всё понял: необходима была связь таблиц tmpData_2.cRec_D и tmpData.cRec
Вот так решение есть:
Всем огромное спасибо! |
© 2000-2024 Fox Club  |