Вопрос № 121818: Здравствуйте ув. эксперты!
Есть такой вопрос, думаю не легкий. Есть таблица Товары (содержит информацию о товаре), а также три таблицы Магазин1, Магазин2, Магазин3. В них есть такие поля: ИдТовара, Наличие,Приход,Продажи.
Мне надо составить з...
Вопрос № 121.818
Здравствуйте ув. эксперты!
Есть такой вопрос, думаю не легкий. Есть таблица Товары (содержит информацию о товаре), а также три таблицы Магазин1, Магазин2, Магазин3. В них есть такие поля: ИдТовара, Наличие,Приход,Продажи.
Мне надо составить запрос так, чтобы в результате запроса были такие колонки: ну собственно сама информация о товара, а также Магазин1, Магазин2, Магазин3. В последних трех колонках должно стоять количество товара в данном магазине, а если такого нету, то нуль. Это количество берется из поля Наличие в каждой таблице Магазин.
Не знаю, может я как-то неправильно составил таблицы и связь между ними, но я уже долго мучаюсь, а такого запроса составить не могу. Возвращает тока те товары, которые есть во всех трех магазинах. Но мне надо получить именно такой результат.
ЗЫ: В таблицах Магазин хранится инфа тока о том товаре, который там есть, т.е. нулей нету.
ЗЫ:ЗЫ: делаю в MS Access
Отправлен: 05.02.2008, 19:16
Вопрос задал: BerdArt (статус: 3-ий класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Zubex
Здравствуйте, BerdArt!
Таблицы, на мой взгляд, дествительно составлены не правильно. Вместо 3-х таблиц магазинов надо было сформировать таблицу "Магазины" со столбцами ID, MAGAZ_NAME, а также одну таблицу типа "Склад" с полями ИдМагазина,ИдТовара, Наличие,Приход,Продажи. Ну и связать их по Ид. Это позволит не привязываться только к трем магазинам.
Но и в Вашем случае можно составить запрос примерно такого вида:
select т.Ид, [т.остальные поля,]
(select м1.Наличие from Магазин1 м1 where м1.ИдТовара=т.Ид) mag1,
(select м2.Наличие from Магазин2 м1 where м2.ИдТовара=т.Ид) mag2,
(select м3.Наличие from Магазин3 м3 where м3.ИдТовара=т.Ид) mag3
from Товары т
Удачи!
--------- Если не знаешь что сказать - лучше промолчи...
Ответ отправил: Zubex (статус: 7-ой класс)
Ответ отправлен: 05.02.2008, 22:25 Оценка за ответ: 5 Комментарий оценки: Спасибо за ваше участие. 1. Да, думаю что такой проект таблиц будет правильным и удобным даже в использовании. Но, к сожалению, он не решал той проблемы что была. Все равно проблема не существования таких полей оставалась. Но... 2. такой запрос, как вы предлагаете, действительно, можно сказать, решает ее. Правда, в результате такого запроса вместо желаемых
нулей получаются пустые клетки, но может быть так даже удобнее работать и к тому же Access их принимает за нулевые и если посчитать сумму, то она будет верной. И еще один недостаток - все поля запроса не редактируемые!!!! даже инфа о товаре. А это не есть гуд
Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, BerdArt!
Создайте групповой запрос с параметрами объединения:
Всех записей из таблицы товары с таблицей Магазин1, в которых связанные поля совпадают.
FROM Товары LEFT JOIN Магазин1 ON Товары.Id_Товары = Магазин1.Id_Товары
"Три последних" могут формироваться так:
Sum(IIf(IsNull([Магазин?]![количество]),0,[Магазин?]![количество]))
Евгений.
Ответ отправил: Тесленко Евгений Алексеевич (статус: Студент)
Ответ отправлен: 06.02.2008, 02:40 Оценка за ответ: 5 Комментарий оценки: Дело в том что присоединяемые таблицы через JOIN должны иметь связь друг с другом по очереди присоединения, а мне надо, чтобы все приписываемые таблицы зависели от первой (главной) Ну а вторая часть вашего ответа действительно то, что мне нужно. Большое спасибо!!! Жаль правда, что эти ячейки не редактируются теперь, но по другому невозможно. Еще раз спасибо.
Отвечает: Челноков Виктор Альбертович
Здравствуйте, BerdArt!
Используйте в запросе объеденение один ко многим.
Т.е. одна запись в табл товары и много записей в табл. магазин.
Ответ отправил: Челноков Виктор Альбертович (статус: 5-ый класс)
Ответ отправлен: 06.02.2008, 08:54 Оценка за ответ: 4 Комментарий оценки: Спасибо за то, что откликнулись, но к сожалению ничего полезного из вашего ответа почерпнуть не удалось
Отвечает: Serge R. Bochkareff
Здравствуйте, BerdArt!
Видимо вам необходимо сделать объединение трех запросов. Точно не помню, но в оракле есть такая штука как union
select field1, field2, field3
from table1
where ...
union all
select field1, field2, field3
from table2
where ...
union all
select field1, field2, field3
from table3
where ...
А похорошему таблица магазинов должна быть одна. Должно быть поле определяющее id магазина
table good
gid
name
price_buy
price_sale
... etc
table shops
sid
name
address
table container
cid
gid
sid
count
sold
shipping
income
Что-то в этом духе. Не стоит хранить в принципе одни и те же данные в разных таблицах.
Ответ отправил: Serge R. Bochkareff (статус: 1-ый класс)
Ответ отправлен: 06.02.2008, 09:12 Оценка за ответ: 4 Комментарий оценки: Union здесь не подходит, т.к. он присоединяет какую либо инфу в следующих строках! а не столбцах. А за структуру таблиц большое спасибо, думаю это более правильно, чем у меня было.