не могу записать запрос.

Программирование на Visual Basic for Applications
Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

не могу записать запрос.

Сообщение Avtopic » 30.12.2005 (Пт) 14:54

Здравствуйте все!
Ест база “goods”, содержит код товара (f1), название (f2), размер (f4).
----f1-------f2-------f3-----f4
--1010---Fitting----------D10
--1020---Fitting----------D20
--1030---Fitting----------D30
--1040---Fitting----------D40
--1050---Fitting----------D50
--1060---Fitting----------D60
--1070---Fitting----------D70
--1080---Fitting----------D80
и база “sales”, продажи - код товара (f1), количество (f2), цена (f3).
----f1-------f2--------f3
--1010-----50------4,20
--1030-----12------5,80
--1060-----32------12,2
--1070-----18------18,6
пишу запрос:
sqlk = "SELECT goods.f1, goods.f2, goods.f4, sales.f2, sales.f3 FROM goods,sales WHERE goods.f1 = sales.f1;"
получаю:
----f1-------f2---------f3--------f4--------f5
--1010---Fitting---- D10------50------4,20
--1030---Fitting---- D30------12------5,80
--1060---Fitting---- D60------32------12,20
--1070---Fitting---- D70------18------18,6
никак не могу записать запрос, чтобы получить следующее
----f1-------f2---------f3--------f4--------f5
--1010---Fitting-----D10------50------4,20
--1020---Fitting-----D20------------------
--1030---Fitting-----D30------12------5,80
--1040---Fitting-----D40------------------
--1050---Fitting-----D50------------------
--1060---Fitting-----D60------32------12,20
--1070---Fitting-----D70------------------
--1080---Fitting-----D80------18------18,6

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 30.12.2005 (Пт) 14:59

Да..., работаю в Excel-e а база .mdb

pshik
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 23.07.2005 (Сб) 18:57

Сообщение pshik » 30.12.2005 (Пт) 18:15

select..... from goods left join sales on goods.f1 = sales.f1 where.....

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 30.12.2005 (Пт) 20:56

пишет: join expression not supported

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 30.12.2005 (Пт) 21:23

pshik
Спасибо!
Вы привели меня к решению:
http://bbs.vbstreets.ru/viewtopic.php?t=19440

Я понял что надо искать не по MSDN, а по форумам vbstreets.ru :)

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 01.01.2006 (Вс) 21:46

С НОВЫМ ГОДОМ!

Кроме этих, еще ест базы объектов, которые точные копии “Sales” и содержат продажи отдельных магазинов.
Не как не работает следующий запрос:
sqlk = "SELECT goods.f1 , goods.f2, goods.f4, ob1.f2, ob2.f2 FROM goods LEFT JOIN ob1 ON goods.f1 = ob1.f1 LEFT JOIN ob2 ON goods.f1 = ob2.f1;"

где ошибка?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.01.2006 (Вс) 21:49

Access не понимает такое вложение.
Access понимает FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t2.field=t3.field) ON t1.field=t2.field
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 01.01.2006 (Вс) 23:44

Следуя логике, будет работать?
FROM t1 LEFT JOIN (t2 LEFT JOIN (t3 LEFT JOIN t4 ON t3.field = t4.field) ON t2.field=t3.field) ON t1.field=t2.field
не дает не ошибки не результата.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.01.2006 (Пн) 8:04

Составлено правильно...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 02.01.2006 (Пн) 14:56

Работает, но результат не тот, который я ожидал и хотел. Выводит вес перечень из t1 и только те записи из t2, t3, t4 которые присутствуют во всех таблицах (t2 And t3 And t4), а мне нужно вес перечень из t1 и все записи из t2, t3, t4 которые присутствуют хотя бы в одной из них (t2 Or t3 Or t4).
Примерно такое:
t1.field1-----t1.field2-----t1.field3-----t2.fild---- t3.fild---- t4.fild
--1010-------Fitting---------D10----------10--------30---------40
--1020-------Fitting---------D20---------------------20---------
--1030-------Fitting---------D30----------12--------------------10
--1040-------Fitting---------D40---------------------------------
--1050-------Fitting---------D50---------------------------------24
--1060-------Fitting---------D60----------14--------15---------
--1070-------Fitting---------D70---------------------------------
--1080-------Fitting---------D80-----------9--------10----------6

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.01.2006 (Пн) 15:21

Попробуй
t4 RIGHT JOIN (t3 RIGHT JOIN (t2 RIGHT JOIN t1 ON t2.=t1.) ON t3.=t1.) ON t4.=t1.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 02.01.2006 (Пн) 15:42

Огромное спасибо GSerg! Все работает.
Вы за меня сделали вес проект.

sqlk = "SELECT Больших успехов! FROM 2006 год FOR GSerg;" :)

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 03.01.2006 (Вт) 15:36

Как-то не удобно новую тему открывать, сколько вопросов задаю... :oops:
Тут я что-то написал в запросе, опираясь на предыдущую помощь:

SELECT t1.товар, IIf(IsNull([t2.f2]),0,[t2.f2])+IIf(IsNull([t3.f2]),0,[t3.f2])+IIf(IsNull([t4a.f2]),0,[t4.f2]) +IIf(IsNull([t5a.f2]),0,[t5.f2]) +IIf(IsNull([t6a.f2]),0,[t6.f2]) +IIf(IsNull([t7a.f2]),0,[t7.f2]) +IIf(IsNull([t8a.f2]),0,[t8.f2]) +IIf(IsNull([t9a.f2]),0,[t9.f2]) +IIf(IsNull([t10a.f2]),0,[t10.f2]) +IIf(IsNull([t11a.f2]),0,[t11.f2]) +IIf(IsNull([t12a.f2]),0,[t12.f2]) +IIf(IsNull([t13a.f2]),0,[t13.f2]) +IIf(IsNull([t14a.f2]),0,[t14.f2]) и т.д.
дает перечень товара и сколько еще в наличии в t1..t n
Все работает и результат тоже правильный, но хочу удостовериться, не придумало ли человечество в борьбе с NULL что не будь изощреннее.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.01.2006 (Вт) 15:41

Если в Access, то функция Nz(Expr, ValueIfNull)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 03.01.2006 (Вт) 16:39

Нашел я этот Nz в форумах (тем с Null огромное количество) и возился с ним, но пишет, что не знает такого.
Access 2000 и DAO 3.6, проблема где-то здесь?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.01.2006 (Вт) 16:45

Внутри базы оно работает. При вызове снаружи нет.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 03.01.2006 (Вт) 16:54

Ну, вы фактический в ONLINE режиме работаете на форуме.
Точно VBA help в Access-е дает справку про Nz а VBA help в Excel-е нет.
Спасибо еще раз.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 107

    TopList