Приветствия профессионалам! Снизойдите плз до простого пользователя и помогите в такой проблеме :
есть, грубо говоря и предельно сокращая, 3 таблицы. Одна из них (Программа) содержит перечень артикулов, который выступает в качестве списка для двух других таблиц (Цеха), в которые, в свою очередь, заносятся ежедневные данные в некоторое количество столбцов. Соответственно, один и тот же артикул может быть повторен многократно в этих двух таблицах. Если же формировать запрос, то показываются все мыслимые комбинации по данному артикулу из второй и третьей таблиц. Как победить это полное объединение, чтобы по одному артикулу выдавалась одна строка с суммой? Прописанные связи: Программа-Цех1, Программа-Цех2, Цех1-Цех2 (все связи по записи Артикул).
Здравствуйте JK, Вы писали:
JK>есть, грубо говоря и предельно сокращая, 3 таблицы. Одна из них (Программа) содержит перечень артикулов, который выступает в качестве списка для двух других таблиц (Цеха), в которые, в свою очередь, заносятся ежедневные данные в некоторое количество столбцов. Соответственно, один и тот же артикул может быть повторен многократно в этих двух таблицах. Если же формировать запрос, то показываются все мыслимые комбинации по данному артикулу из второй и третьей таблиц. Как победить это полное объединение, чтобы по одному артикулу выдавалась одна строка с суммой? Прописанные связи: Программа-Цех1, Программа-Цех2, Цех1-
С суммой чего
Цех2 (все связи по записи Артикул).
JK>Надеюсь на понимание и снисхождение!
Неа, давай структуру таблиц и нормально описывай, что ты хочешь получить. Заниматься гаданием на кофейной гуще нет никакого желания.
Re[2]: Access-запрос
От:
Аноним
Дата:
12.03.02 14:06
Оценка:
Здравствуйте Lexey, Вы писали:
L>С суммой чего :???: L>Неа, давай структуру таблиц и нормально описывай, что ты хочешь получить. Заниматься гаданием на кофейной гуще нет никакого желания.
Тогда необходимо в запросе достичь:
Цех1Запуск Цех1Выпуск Цех1Передача Цех2Запуск Цех2Выпуск Цех2Передача
1111 300 300 200 250 250 250
2222 350 350 350 500 500 400
А за счет того, что записи объединяются каждая с каждой, получается:
Цех1Запуск Цех1Выпуск Цех1Передача Цех2Запуск Цех2Выпуск Цех2Передача
1111 300 300 200 500 500 500
2222 700 700 700 500 500 400
Что делать и как быть? Связи таблиц по записи Артикул.
Спасибо за ответ!
JK
Re[2]: Access-запрос
От:
Аноним
Дата:
12.03.02 14:07
Оценка:
Здравствуйте Lexey, Вы писали:
L>С суммой чего :???: L>Неа, давай структуру таблиц и нормально описывай, что ты хочешь получить. Заниматься гаданием на кофейной гуще нет никакого желания.
Тогда необходимо в запросе достичь:
Цех1Запуск Цех1Выпуск Цех1Передача Цех2Запуск Цех2Выпуск Цех2Передача
1111 300 300 200 250 250 250
2222 350 350 350 500 500 400
А за счет того, что записи объединяются каждая с каждой, получается:
Артикул Цех1Запуск Цех1Выпуск Цех1Передача Цех2Запуск Цех2Выпуск Цех2Передача
1111 300 300 200 500 500 500
2222 700 700 700 500 500 400
Что делать и как быть? Связи таблиц по записи Артикул.
А тут дата какое-нить значение играет? А>Тогда необходимо в запросе достичь: А> Цех1Запуск Цех1Выпуск Цех1Передача Цех2Запуск Цех2Выпуск Цех2Передача А>1111 300 300 200 250 250 250 А>2222 350 350 350 500 500 400
а это как получилось? запрос свой покажи... А>А за счет того, что записи объединяются каждая с каждой, получается: А>Артикул Цех1Запуск Цех1Выпуск Цех1Передача Цех2Запуск Цех2Выпуск Цех2Передача А>1111 300 300 200 500 500 500 А>2222 700 700 700 500 500 400
а еще лучше если б ты скипты на создание таблиц, можна индексов, внешних ключей
плюс к этому скрипт заполняющий базу тестовыми данными ну и плюс твой неправилный запрос...
а то ведь ломает все это делать.... вот так
Здравствуйте Аноним, Вы писали:
А>Здравствуйте Lexey, Вы писали:
L>>С суммой чего L>>Неа, давай структуру таблиц и нормально описывай, что ты хочешь получить. Заниматься гаданием на кофейной гуще нет никакого желания.
А>Таблицы следующие. Программа: артикул, марка, кол-во... Цех1 и Цех2: дата, артикул, запуск, выпуск, передача. В таблицы цехов количественные данные заносятся ежедневно. Получается ситуация, А> дата артикул запуск выпуск передача А>Цех1 А> 10.02. 1111 200 200 200 А> 11.02. 1111 100 100 А> 11.02. 2222 350 350 350 А>Цех2 А> 10.02. 2222 100 100 А> 11.02. 1111 250 250 250 А> 11.02. 2222 400 400 400
А>Тогда необходимо в запросе достичь: А> Цех1Запуск Цех1Выпуск Цех1Передача Цех2Запуск Цех2Выпуск Цех2Передача А>1111 300 300 200 250 250 250 А>2222 350 350 350 500 500 400
А>А за счет того, что записи объединяются каждая с каждой, получается: А>Артикул Цех1Запуск Цех1Выпуск Цех1Передача Цех2Запуск Цех2Выпуск Цех2Передача А>1111 300 300 200 500 500 500 А>2222 700 700 700 500 500 400
А>Что делать и как быть? Связи таблиц по записи Артикул.
Вложенный запрос.
select Ц1.Артикул, Ц1.Запуск,..., Ц2.Передача from
(select Артикуль,SUM(Запуск),SUM(Выпуск),SUM(Передача) from Цех1 group by Артикуль) Ц1,
(select Артикуль,SUM(Запуск),SUM(Выпуск),SUM(Передача) from Цех2 group by Артикуль) Ц2 where Ц1.Артикуль=Ц2.Артикуль
L>select Ц1.Артикул, Ц1.Запуск,..., Ц2.Передача from
L> (select Артикуль,SUM(Запуск),SUM(Выпуск),SUM(Передача) from Цех1 group by Артикуль) Ц1,
L> (select Артикуль,SUM(Запуск),SUM(Выпуск),SUM(Передача) from Цех2 group by Артикуль) Ц2 where Ц1.Артикуль=Ц2.Артикуль
L>
L>Усе.
Lexey!
На такое великолепие Access отвечает: "Ошибка синтаксиса в предложении FROM". Не хочет обрабатывать вложенные select, пока ему не напишут, from what брать данные.
Первоначальный вариант, который надо исправить, выглядит так:
SELECT Программа.Артикул, Sum(Ц1.Запуск), Sum(Ц1.Выпуск), Sum(Ц1.Передача), Sum(Ц2.Запуск), Sum(Ц2.Выпуск), Sum(Ц2.Передача)
FROM Программа INNER JOIN (Ц1 INNER JOIN [Ц2] ON (Ц1.Артикул = Ц2.Артикул) AND (Ц1.Артикул = Ц2.Артикул)) ON (Программа.Артикул = Ц2.Артикул) AND (Программа.Артикул = Ц1.Артикул)
GROUP BY Программа.Артикул
ORDER BY Программа.Артикул
Здравствуйте JK, Вы писали:
L>>Вложенный запрос. L>>
L>>select Ц1.Артикул, Ц1.Запуск,..., Ц2.Передача from
L>> (select Артикуль,SUM(Запуск),SUM(Выпуск),SUM(Передача) from Цех1 group by Артикуль) Ц1,
L>> (select Артикуль,SUM(Запуск),SUM(Выпуск),SUM(Передача) from Цех2 group by Артикуль) Ц2 where Ц1.Артикуль=Ц2.Артикуль
L>>
L>>Усе.
JK>Lexey!
JK>На такое великолепие Access отвечает: "Ошибка синтаксиса в предложении FROM". Не хочет обрабатывать вложенные select, пока ему не напишут, from what брать данные.
Мда, всегда знал, что Access — это недоSQLная база.
Может ему полегчает, если добавить AS перед Ц1 и Ц2 ( (select ... from ...) AS Ц1 ).
Впрочем, я в этом совсем не уверен.
Если не сработает, то тогда наверное только через промежуточные таблицы.
В крайнем случае можно еще попробовать так:
select Артикул, (SELECT SUM(Запуск) from Цех1 where Цех1.Артикул=Артикул group by Артикул),...,(SELECT SUM(Передача) from Цех2 where Цех2.Артикул=Артикул) from Программа order by Артикул Asc
Re[6]: Access-запрос
От:
Аноним
Дата:
13.03.02 12:25
Оценка:
Здравствуйте Lexey, Вы писали:
L>Мда, всегда знал, что Access — это недоSQLная база. L>Может ему полегчает, если добавить AS перед Ц1 и Ц2 ( (select ... from ...) AS Ц1 ). L>Впрочем, я в этом совсем не уверен. L>Если не сработает, то тогда наверное только через промежуточные таблицы.
L>В крайнем случае можно еще попробовать так: L>
L>select Артикул, (SELECT SUM(Запуск) from Цех1 where Цех1.Артикул=Артикул group by Артикул),...,(SELECT SUM(Передача) from Цех2 where Цех2.Артикул=Артикул) from Программа order by Артикул Asc
L>
Не помогли и эти варианты. Но снизойдя до промежуточных таблиц, больше уже ничего и не надо было! По-дурному, зато надежно! А главное — те цифры, которые так долго не хотели появляться!
Спасибо за содействие! Привет клану программистов от клана экономистов :)!!!
Успехов!
JK
Здравствуйте Lexey, Вы писали:
L>Мда, всегда знал, что Access — это недоSQLная база. L>Может ему полегчает, если добавить AS перед Ц1 и Ц2 ( (select ... from ...) AS Ц1 ). L>Впрочем, я в этом совсем не уверен. L>Если не сработает, то тогда наверное только через промежуточные таблицы.
L>В крайнем случае можно еще попробовать так: L>
L>select Артикул, (SELECT SUM(Запуск) from Цех1 where Цех1.Артикул=Артикул group by Артикул),...,(SELECT SUM(Передача) from Цех2 where Цех2.Артикул=Артикул) from Программа order by Артикул Asc
L>
Не помогли и эти варианты. Но снизойдя до промежуточных таблиц, больше уже ничего и не надо было! По-дурному, зато надежно! А главное — те цифры, которые так долго не хотели появляться!
Спасибо за содействие! Привет клану программистов от клана экономистов :)!!!
Успехов!
JK