![]() |
|
|
![]()
|
|
| Nowichok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 23.11.2006 Репутация: нет Всего: нет |
Имеются таблицы:
Uchrezdenie Smeta Нужно получить сумму полей из таблицы Uchrezdenie по округу 'ЦАО' (к примеру). Так же нужно получить кол-во смет на этот же округ. (таблицы связаны между собой полем ID_uch). По идее можно и в два отдельных запроса делать, но хочется, чтобы код был компактным, тем более таблицы то связаны меж собой. Пытаюсь написать:
Этот запрос даже обрабатывается, НО - цифры получаются неверные. И даже не смог понять, откуда эти цифры. Возможно ли вообще сделать, как я хочу ? |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: нет Всего: 37 |
Вы хоть понимаете, что выбираете не из таблицы "смета" и таблицы "учреждение", а из результирующей таблицы, которая является произведением этих двух?
|
|||
|
||||
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Да запрос действительно непонятно, что вернёт. Тоесть при некоторых условиях наложенных на таблицы, при учете что в таблице смета всегда есть данные для таблицы учреждения там может и получится что-то похожее на правду. Это так навскиду.
Однако к вам вопрос, поле Id_uch уникальное для какой-то из таблиц, или для обеих сразу? Думаю когда вы ответите на этот вопрос сами напишите ответ к теме, ну нет так поможем |
|||
|
||||
| kobra |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
да...
кажется ви совсем запутаите человека
left join нужен чтобы не потерять те учереждения, для которых нет смет. |
|||
|
||||
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
kobra, а если на каждый Uchrezdenie.Id_uch приходится несколько(N штук) Smeta.Id_uch, то какое число у тебя получится в Sum(Uchrezdenie.Summa_po_planu)? умноженное на N наверное должно быть, если конечно я не путаю ничего?
Да и условия where не хватает на Uchrezdenie.Okrug='ЦАО'? И плюс ко всему в Count не учитывается, что туда могут попасть NULL элементы, а это минус -1 нужно сделать. Не судите строго если чво неправильно сказал |
|||
|
||||
| Nowichok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 23.11.2006 Репутация: нет Всего: нет |
Ээээм.
ID_uch - ключевое и неповторимое поле у Uchrezdenie У сметы ключевое поле другое - n_smeti одному учреждению может приходиться несколько смет. Но одна смета может быть только на одно учреждение. Собственно, думаю, что легче сделать отдельными зпросами. Уже сделал. Просто интересно было |
|||
|
||||
| kobra |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
будем судить, и очен строго
условие перенесено в отнашение
ты хозяин |
||||
|
|||||
| pavelv |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
На каждую запись в Учреждении появится по несколько записей смет и в этом случае Sum(Uchrezdenie.Summa_po_planu) должно вернуть сумму всех записей. Почему вы думаете, что group by за вас будет отбрасывать записи в сум и не будет этого делать в count? Возможно есть какие-то стандарты sql которых это и будет выполнено, но кароче что-то я недогоняю.
видимо не понимаем друг друга. Условие where отличается от условий left join. Если добавить условие по округу в where оно автоматически попадёт в Left, а наоборот просто на каждую запись которая не является округом ЦАО не будет выборки из таблицы смета. Блин надеюсь пояснил мысль Про каунт ты прав конечно, я немного о другом говорил. Имелось ввиду, что если просто делать коунт записей(по *)...если по ид сметы, то всё будет нормально. |
||||
|
|||||
| kobra |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
|
||||
|
|||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |