Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Сложный запрос


Автор: Chyslyvchyk 21.1.2006, 11:10
Есть 4 таблицы: base(kol1,kol2,prim,name,cena), cross(id,nomer,name), _spec(opt,name), skidki(Поле5,name). Связаны таблицы по полю name.

Нужно сделать выборку:

1) поле id = cross.id

2) поле nomer = cross.nomer

3) поле cena =
если base.cena <> 0, тогда
если base.prim = '#', то брать значение из _spec.opt
если base.prim <> '#', то (base.cena/100)*(100-skidki.Поле5)

4) поле percent =
если base.kol1<>'' или base.kol2<>'', тогда percent = 1
если base.kol1='', но base.kol2<>'', тогда percent = 2
все остальное выбросить

Можно это как-то все в одном запросе оформить?



Автор: bas 21.1.2006, 14:19
используй iif

Автор: Chyslyvchyk 25.1.2006, 11:50
Все несколько раз переиграли и условие поменялось. Есть 4 таблицы: base(kol1,kol2,kol3,prim,kod,cena,kodpgr), cross(id,nomer,kod), _spec(opt,name), skidki(Поле5,Поле3). Связаны таблицы кто как: base.kod=cross.kod, base.kodpgr=skidki.Поле3, _spec.kod=base.kod

Нужно сделать выборку:

1) поле id = cross.id

2) поле nomer = cross.nomer

3) поле cena =
если base.cena <> 0, тогда
если base.prim = '#', то брать значение из _spec.opt
если base.prim <> '#', то (base.cena/100)*(100-skidki.Поле5)

4) поле percent =
если base.kol1<>'' или base.kol2<>'', тогда percent = 1
если base.kol1='' и base.kol2='' и base.kol3<>'', тогда percent = 2
все остальное выбросить

Вот что родилось после долгих потуг (bas, спасибо):
Код

SELECT cross.id_firma, cross.nomer, (
SELECT  ((base.CENA/100)*(100-(SELECT Поле5 FROM skidki WHERE skidki.Поле3=base.KODPGR)))  
FROM base 
WHERE (base.CENA <> 0) and (base.kod = cross.kod) 
) AS Cena, 
(
SELECT IIF([base.KOL1]<>'' OR [base.KOL2]<>'',1,(IIF([base.KOL1]='' AND [base.KOL2]='' AND [base.KOL3]<>'',2,0))) 
FROM base 
WHERE base.kod = cross.kod
) AS Percent1
FROM [cross] INNER JOIN (base INNER JOIN skidki ON base.KODPGR = skidki.Поле3) ON cross.KOD = base.KOD;



Работает ужасно долго. Данные выгрузить в таблицу или какой-нить файл не может - зависает. Подкорректируйте, пожалуйста. smile

И так и не вышло включить в это действо:
для поля 3) условие с #
для поля 4) все остальное выбросить

Автор: Akina 25.1.2006, 13:06
Цитата(Chyslyvchyk @ 25.1.2006, 12:50 Найти цитируемый пост)

Все несколько раз переиграли и условие поменялось.

Слушай внимательно, и не говори что не слышал.

Вместо того чтобы описывать что у тебя за таблицы и сколько их (тем более что один хрен половину не указал - хотя бы ключевые поля) и как они связаны - делаешь базу только с нужными таблицами без данных, но со схемой связей, сжимаешь ее, пакуешь ЗИПом или РАРом и аттачишь в постинг.

Цитата(Chyslyvchyk @ 25.1.2006, 12:50 Найти цитируемый пост)

Работает ужасно долго.

Ну еще бы! нафига ты вложенных запросов настрогал?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)