|
|
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Здравствуйте коллеги! Возникла необходимость просуммировать все поля из нескольких таблиц. Сейчас структура такая: ДанныеОбъекта_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) не работает :( Прошу помощи у коллег. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 08:46 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
А что если так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 08:55 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
2Забудкин Лев Вы по каждому объекту заводите новую таблицу? Это ни есть гуд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 09:27 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Senin Viktor, да, по каждому объекту. Просто получается так, что у каждого объекта собственные подрядчики и источники по каждому месяцу, в свою очередь по каждому подрядчику и источнику имеются множество полей (22 поля), в которых содержатся числовые данные. Таким образом, содержать все эти данные в одной таблице получается накладно, т.к. объектов множество (около 1000), подрядчиков у объекта может быть неограниченное количество (в данный момент в средней 3 подрядчика на объект), источников 3 (бюджет, округ, иные источники). А все это еще и по датам.... за год получается (1000*(3+3)*12)=72000 записей на объект (в среднем) в год. А уже есть данные за 3 года. Слишком много данных получается. Потому я и выбрал такой подход. Ну так, коллеги, есть еще варианты для имеющейся ситуации? Жаль, что такого запроса как SELECT Кап1_1 FROM ДанныеОбъекта_* WHERE ПодрядчикID=12 не существует :( Описанный PV вариант не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 09:39 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Senin Viktor, да, по каждому объекту. Просто получается так, что у каждого объекта собственные подрядчики и источники по каждому месяцу, в свою очередь по каждому подрядчику и источнику имеются множество полей (22 поля), в которых содержатся числовые данные. Таким образом, содержать все эти данные в одной таблице получается накладно, т.к. объектов множество (около 1000), подрядчиков у объекта может быть неограниченное количество (в данный момент в средней 3 подрядчика на объект), источников 3 (бюджет, округ, иные источники). А все это еще и по датам.... за год получается (1000*(3+3)*12)=72000 записей на объект (в среднем) в год. А уже есть данные за 3 года. Слишком много данных получается. Потому я и выбрал такой подход. Ну так, коллеги, есть еще варианты для имеющейся ситуации? Жаль, что такого запроса как SELECT Кап1_1 FROM ДанныеОбъекта_* WHERE ПодрядчикID=12 не существует :( Описанный PV вариант не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 09:40 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Может структуру поменять, добавить справочных таблиц, и перейти к одной таблице? И чем плох мною предложенный вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 09:49 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
>>Вы по каждому объекту заводите новую таблицу? Это ни есть гуд У меня аналогичная база и 2 года назад из за схожих проблем переделала целиком всю схему данных и теперь все объекты в одной таблице Работать очень удобно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 09:51 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
2Ирча >и теперь все объекты в одной таблице Работать очень удобно Еще бы не удобно. Нормализация это называется. 2Забудкин Лев >Таким образом, содержать все эти данные в одной таблице получается накладно, т.к. объектов множество (около 1000), Вам я бы очень рекомендовал изменить структуру базы. Не можете сами - пригласите специалиста по базам данных и не обязательно по Акесу. И кто вам сказал что содержать в таблице данные - это накладно? И для каждого свойства объекта не должно быть 22 поля - а должна быть отдельная таблица. Сегодняшний ваш вопрос - это только начало проблем. С каждым днем развития программы у вас их будет все больше и больше, пока программа не умрет (что наступит очень быстро). >, т.к. объектов множество (около 1000), Это 1000 таблиц? Хотя число объектов базе данных Акеса и ограничено (32 768 штуки) у вас еще есть время по-работать:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 10:05 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Если вариант PV не подходит (??), то см. свое первое сообщение. А если количество таблиц будет расти, то либо считать все программно, либо переделывать запрос (кстати весьма полезно - есть гарантия, что без программиста фирме не обойтись ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 10:06 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Решение 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. Может я что-то не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 12:15 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Решение 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. Может я что-то не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 12:16 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. Может дело в следующем? 1.скобки внешние - круглые 2.за последней скобкой должен стоять псевдоним таблицы, получаемой внутри внешних скобок, для которой берется внешний запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 12:25 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Спасибо, сейчас вроде работает - ошибок не выдает. 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). А когда как я делаю так, как я описал в самом первом сообщении, то сумма имеется. В чем может быть глюк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 12:33 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Спасибо, сейчас вроде работает - ошибок не выдает. 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). А когда как я делаю так, как я описал в самом первом сообщении, то сумма имеется. В чем может быть глюк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 12:33 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Сумма выводится на форму? или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 12:54 |
|
||
|
Суммирование поля из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
на Visual Basic 6.0. Всё :) разобрался. Всем спасибо! Это я тут не из всех таблиц данные взял и уже занервничал :)) А так - всё ровно! Скорость буквально возрасла в разы! Где-то в 10 раз быстрее! Спасибо еще раз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 13:17 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1798&tid=1681316]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 393ms |

| 0 / 0 |
