Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2011, 12:41   #1
santekalex
 
Регистрация: 18.01.2011
Сообщений: 8
По умолчанию Запрос на суммирование с повторяющимися записями во второй таблице

Добрый день!Не могу заставить access просуммировать столбец(Count) из таблицы(ASW), чтобы из второй таблицы(ProductDetails),которая служит как таблица соответсвия кодов, было добавлено поле с наименованием Material N.При выполнении запроса (11111) ,где суммируется Sum(Count) значения умножаются на количество совпадающих записей по полю CodeOper в таблице (ProductDetails),а мне бы хотелось , чтобы были просуммированы лишь значения поля Count (1+2+3=6) , которые содержатся в таблице ASW без умножения на количество записей в ProductDetails.
Вложения
Тип файла: zip 2tables.zip (41.7 Кб, 15 просмотров)
santekalex вне форума Ответить с цитированием
Старый 07.04.2011, 13:01   #2
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
Трудно что-то понять... Попробуйте запрос
Код:
SELECT *
FROM ProductDetails INNER JOIN ASW ON ProductDetails.CodeOper = ASW.CodeOper;
а потом объясните лучше. Может Вы и сами поймёте ошибку
До свидания
OlegVE вне форума Ответить с цитированием
Старый 07.04.2011, 16:18   #3
santekalex
 
Регистрация: 18.01.2011
Сообщений: 8
По умолчанию

Извините, если я туманно выразился .Попробую так.
Запрос


SELECT ASW.CodeOper, ASW.Count, ProductDetails.[Material №]
FROM ProductDetails INNER JOIN ASW ON ProductDetails.CodeOper = ASW.CodeOper
GROUP BY ASW.CodeOper, ASW.Count, ProductDetails.[Material №];


выдает значения по полю Count 1,2,3

Можно ли просуммировать значения по полю Count (т.е. 1+2+3=6)

я пробую

SELECT ASW.CodeOper, Sum(ASW.Count) AS [Sum-Count], ProductDetails.[Material №]
FROM ProductDetails INNER JOIN ASW ON ProductDetails.CodeOper = ASW.CodeOper
GROUP BY ASW.CodeOper, ProductDetails.[Material №];


у меня вместо значения суммы 6 стновится 18 (т.е. умножается на 3)

Спасибо за то, что уделяете мне внимание
santekalex вне форума Ответить с цитированием
Старый 07.04.2011, 16:22   #4
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Попробуйте поиграть с таким запросом (проверять некогда, много работы принесли)
Цитата:
SELECT AAA.[Material №], Sum(AAA.Count) AS [Sum-Count]
FROM (SELECT DISTINCT [Material №], Count FROM ProductDetails,ASW WHERE ProductDetails.CodeOper = ASW.CodeOper) AS AAA
GROUP BY AAA.[Material №];
До свидания. До понедельника.
P.S. Может ещё раз загляну перед уходом, но не обещаю

Последний раз редактировалось OlegVE; 07.04.2011 в 16:24.
OlegVE вне форума Ответить с цитированием
Старый 07.04.2011, 16:30   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я тоже не разобрался в хитросплетениях и связах ваших таблиц.
но, можно использовать вложенный запрос:

Код:
SELECT AA.CodeOper,  AA.[Material №], SUM(AA.CNT) as SummaCount
FROM 
(SELECT ASW.CodeOper, ASW.Count as Cnt, ProductDetails.[Material №]
FROM ProductDetails INNER JOIN ASW ON ProductDetails.CodeOper = ASW.CodeOper
GROUP BY ASW.CodeOper, ASW.Count, ProductDetails.[Material №]) AA
GROUP BY AA.CodeOper,  AA.[Material №];
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.04.2011, 17:39   #6
santekalex
 
Регистрация: 18.01.2011
Сообщений: 8
По умолчанию

Спасибо за решения, но они не проходят , потому, что если в таблицу ASW добавить еще одну строку ,где CodeOper=370110100 Count=1, то по вашим запросам Sum-Count останется =6 , а надо чтобы было 7.Т.к. в ASW поле Count имеет значения (1,2,3,1) и их сумма=7(1+2+3+1)
santekalex вне форума Ответить с цитированием
Старый 07.04.2011, 19:17   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

странно, должно всё работать..

сделайте тестовую базку.
выложите тут архив с этой базой.
проще будет посмотреть...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.04.2011, 09:40   #8
ovt256
Форумчанин
 
Регистрация: 01.04.2011
Сообщений: 226
По умолчанию

Так и должно получиться 18, поскольку CodeOper в таблице ASW у всех трех записей одинаковые. При таких данных Ваш запрос выбирает для каждой записи из таблицы ASW все записи из таблицы ProductDetails.

Скорее всего, структура Вашей БД не соответствует поставленной задаче. Для того, чтобы предложить варианты исправления, необходимо знать начальную задачу и конечную цель.

Вот этот запрос работает так, как Вы ожидаете:

SELECT AAA.CodeOper, AAA.[Material №], Sum(AAA.Cnt) AS Выражение1
FROM (SELECT ASW.CodeOper, ASW.Cnt, ProductDetails.[Material №]
FROM ProductDetails INNER JOIN ASW ON ProductDetails.CodeOper = ASW.CodeOper
GROUP BY ASW.CodeOper, ASW.Cnt, ProductDetails.[Material №]) AS AAA
GROUP BY AAA.CodeOper, AAA.[Material №];


PS Не стоит называть пользовательские поля зарезервированными словами типа Count
Если руки золотые, то не важно, откуда они растут.

Последний раз редактировалось ovt256; 08.04.2011 в 10:05.
ovt256 вне форума Ответить с цитированием
Старый 11.04.2011, 11:45   #9
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
После долгих гаданий получилось следующее:
Код:
SELECT ProductDetails.[Material №], AAA.[Sum-Count]
FROM (SELECT CodeOper, Sum(Count) AS [Sum-Count]
FROM ASW GROUP BY [CodeOper]) AS AAA  LEFT JOIN ProductDetails ON ProductDetails.CodeOper = AAA.CodeOper;
Но, в чайной заварке никак не укладывался в узор HAVING (((Sum(ASW.Count))>0)); Думаю, если в таблице ASW нет данных для некоторого материала из ProductDetails, то инструкция не нужна... У Вас нет никаких связей в БД и что-то сказать без описания внятное... Попробуйте объяснить так, если мой код не сработает (если сработает - объясните мне почему ):
1. У меня есть данные.
2. Данные соотносятся между собой следующим образом.
3. Я хочу на основе данных получить следующий результат.
4. Я пытался так... но у меня не получилось, выходит так, а надо так...
До свидания

Последний раз редактировалось OlegVE; 12.04.2011 в 11:44.
OlegVE вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос к dbf таблице!!! dengul БД в Delphi 4 29.03.2011 09:36
Запрос на поиск в таблице Ado alexeybest БД в Delphi 4 16.03.2010 20:35
Поиск и суммирование данных в таблице произвольного размера Darkdog Microsoft Office Excel 26 16.02.2010 10:47
ужно что-бы в 1-ой таблице B копировался из второй таблицы, в зависимотри от A Rashanea Microsoft Office Excel 1 13.12.2008 00:15