powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Суммирование поля из нескольких таблиц
16 сообщений из 16, страница 1 из 1
Суммирование поля из нескольких таблиц
    #32172445
Забудкин Лев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте коллеги!
Возникла необходимость просуммировать все поля из нескольких таблиц.
Сейчас структура такая:
ДанныеОбъекта_1
ДанныеОбъекта_2
..........
ДанныеОбъекта_N

Поля по этих таблицах одинаковые (ПодрядчикID, Кап1_1, Кап2_2, НДС1_1, НДС2_2....)
Возникла необходимость проссумировать поле Кап1_1 из всех таблиц по подрядчику № 12.
Сейчас я глупо открываю каждую таблицу
SELECT Кап1_1 FROM ДанныеОбъекта_1 WHERE ПодрядчикID=12
......
SELECT Кап1_1 FROM ДанныеОбъекта_N WHERE ПодрядчикID=12

и в цикле суммирую поле Кап1_1.

Пытался сделать так:
Select Sum(Кап1_1) AS SumКап1_1 FROM _здесь_список_всех_вышеперечисленных_таблиц WHERE (ПодрядчикID=12)

не работает :(

Прошу помощи у коллег.
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172454
pv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что если так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Select sum(Кап1_1) from
(
SELECT Кап1_1 FROM ДанныеОбъекта_1 WHERE ПодрядчикID= 12  
UNION ALL
...... 
UNION ALL
SELECT Кап1_1 FROM ДанныеОбъекта_N WHERE ПодрядчикID= 12 
)a
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172473
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Забудкин Лев

Вы по каждому объекту заводите новую таблицу?
Это ни есть гуд.
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172486
Забудкин Лев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senin Viktor, да, по каждому объекту.
Просто получается так, что у каждого объекта собственные подрядчики и источники по каждому месяцу, в свою очередь по каждому подрядчику и источнику имеются множество полей (22 поля), в которых содержатся числовые данные.
Таким образом, содержать все эти данные в одной таблице получается накладно, т.к. объектов множество (около 1000), подрядчиков у объекта может быть неограниченное количество (в данный момент в средней 3 подрядчика на объект), источников 3 (бюджет, округ, иные источники).
А все это еще и по датам.... за год получается (1000*(3+3)*12)=72000 записей на объект (в среднем) в год. А уже есть данные за 3 года.
Слишком много данных получается.
Потому я и выбрал такой подход.

Ну так, коллеги, есть еще варианты для имеющейся ситуации?
Жаль, что такого запроса как SELECT Кап1_1 FROM ДанныеОбъекта_* WHERE ПодрядчикID=12 не существует :(
Описанный PV вариант не подходит.
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172489
Забудкин Лев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senin Viktor, да, по каждому объекту.
Просто получается так, что у каждого объекта собственные подрядчики и источники по каждому месяцу, в свою очередь по каждому подрядчику и источнику имеются множество полей (22 поля), в которых содержатся числовые данные.
Таким образом, содержать все эти данные в одной таблице получается накладно, т.к. объектов множество (около 1000), подрядчиков у объекта может быть неограниченное количество (в данный момент в средней 3 подрядчика на объект), источников 3 (бюджет, округ, иные источники).
А все это еще и по датам.... за год получается (1000*(3+3)*12)=72000 записей на объект (в среднем) в год. А уже есть данные за 3 года.
Слишком много данных получается.
Потому я и выбрал такой подход.

Ну так, коллеги, есть еще варианты для имеющейся ситуации?
Жаль, что такого запроса как SELECT Кап1_1 FROM ДанныеОбъекта_* WHERE ПодрядчикID=12 не существует :(
Описанный PV вариант не подходит.
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172499
pv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может структуру поменять, добавить справочных таблиц, и перейти к одной таблице?
И чем плох мною предложенный вариант?
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172502
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Вы по каждому объекту заводите новую таблицу?
Это ни есть гуд

У меня аналогичная база и 2 года назад из за схожих проблем переделала целиком всю схему данных

и теперь все объекты в одной таблице
Работать очень удобно
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172515
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Ирча
>и теперь все объекты в одной таблице
Работать очень удобно

Еще бы не удобно. Нормализация это называется.

2Забудкин Лев
>Таким образом, содержать все эти данные в одной таблице получается накладно, т.к. объектов множество (около 1000),

Вам я бы очень рекомендовал изменить структуру базы. Не можете сами - пригласите специалиста по базам данных и не обязательно по Акесу.
И кто вам сказал что содержать в таблице данные - это накладно? И для каждого свойства объекта не должно быть 22 поля - а должна быть отдельная таблица.
Сегодняшний ваш вопрос - это только начало проблем. С каждым днем развития программы у вас их будет все больше и больше, пока программа не умрет (что наступит очень быстро).

>, т.к. объектов множество (около 1000),
Это 1000 таблиц? Хотя число объектов базе данных Акеса и ограничено (32 768 штуки) у вас еще есть время по-работать:(
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172517
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вариант PV не подходит (??), то см. свое первое сообщение. А если количество таблиц будет расти, то либо считать все программно, либо переделывать запрос (кстати весьма полезно - есть гарантия, что без программиста фирме не обойтись ).
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172682
Забудкин Лев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение PV не подходит.
Когда делаю:

SELECT sum(Кап2_2) FROM {
SELECT Кап2_2 FROM ДанныеОбъекта_44 WHERE (Источник='p17')
UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_30 WHERE (Источник='p17')
UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_68 WHERE (Источник='p17')
UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_32 WHERE (Источник='p17')
}

то выводится: ошибка синтаксиса в предложении FROM.

Может я что-то не так делаю?
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172683
Забудкин Лев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение PV не подходит.
Когда делаю:

SELECT sum(Кап2_2) FROM {
SELECT Кап2_2 FROM ДанныеОбъекта_44 WHERE (Источник='p17')
UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_30 WHERE (Источник='p17')
UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_68 WHERE (Источник='p17')
UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_32 WHERE (Источник='p17')
}

то выводится: ошибка синтаксиса в предложении FROM.

Может я что-то не так делаю?
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172703
pv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Select sum(Кап1_1) from
(
SELECT Кап1_1 FROM ДанныеОбъекта_1 WHERE ПодрядчикID= 12  
UNION ALL
...... 
UNION ALL
SELECT Кап1_1 FROM ДанныеОбъекта_N WHERE ПодрядчикID= 12 
)a

Может дело в следующем?
1.скобки внешние - круглые
2.за последней скобкой должен стоять псевдоним таблицы, получаемой внутри внешних скобок, для которой берется внешний запрос.
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172719
Забудкин Лев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, сейчас вроде работает - ошибок не выдает.
SELECT sum(Кап2_2) AS Summ FROM (
SELECT Кап2_2 FROM ДанныеОбъекта_44 WHERE (Источник='p31') UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_30 WHERE (Источник='p31') UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_68 WHERE (Источник='p31') UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_32 WHERE (Источник='p31') )a

rs = это Recordset
Но когда я беру значение P=rs.fields("Summ").Value, то в переменное P содержится нулевое значение (0 или Null). А когда как я делаю так, как я описал в самом первом сообщении, то сумма имеется.
В чем может быть глюк?
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172723
Забудкин Лев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, сейчас вроде работает - ошибок не выдает.
SELECT sum(Кап2_2) AS Summ FROM (
SELECT Кап2_2 FROM ДанныеОбъекта_44 WHERE (Источник='p31') UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_30 WHERE (Источник='p31') UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_68 WHERE (Источник='p31') UNION ALL SELECT Кап2_2 FROM ДанныеОбъекта_32 WHERE (Источник='p31') )a

rs = это Recordset
Но когда я беру значение P=rs.fields("Summ").Value, то в переменное P содержится нулевое значение (0 или Null). А когда как я делаю так, как я описал в самом первом сообщении, то сумма имеется.
В чем может быть глюк?
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172751
pv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сумма выводится на форму? или как?
...
Рейтинг: 0 / 0
Суммирование поля из нескольких таблиц
    #32172792
Забудкин Лев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на Visual Basic 6.0.
Всё :) разобрался. Всем спасибо!
Это я тут не из всех таблиц данные взял и уже занервничал :))
А так - всё ровно! Скорость буквально возрасла в разы! Где-то в 10 раз быстрее!
Спасибо еще раз!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Суммирование поля из нескольких таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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