powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Многоступенчатая выборка
36 сообщений из 36, показаны все 2 страниц
Многоступенчатая выборка
    #32327104
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо осуществить поиск в таблице "Заказы", потом по отфильтрованным заказам необходимо осуществить поиск в таблице "Касса".
На данный момент я реализовал это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
                Set r = Forms![НС_список заказов].RecordsetClone
                Str3 =  "SELECT * FROM Cash WHERE " 
                r.MoveFirst
                    Do Until r.EOF
                        Str3 = Str3 +  "Cash.[Реф №] = '" & r![Реф №] & "' OR "      ' [Реф №] - это ID заказа'
                        r.MoveNext
                    Loop
                    Str3 = Str3 &  ";" 
                    I1 = InStr(Str3,  ";" )
                    Str3 = Left(Str3, I1 -  5 )
                Set r2 = CurrentDb.OpenRecordset(Str3)

Это хорошо пока заказов мало, а если их будет хотя бы 500, то ошибка: "Слишком сложный запрос".
Какие есть идеи по оптимизации?
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327114
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
                    Str3 = Str3 &  ";" 
                    I1 = InStr(Str3,  ";" )
                    Str3 = Left(Str3, I1 -  5 )

На этот изврат не обращайте внимание :)
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327130
Bolda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а одним запросом с обьединением таблиц это сделать нельзя?
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327134
Bolda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
напиша по подробнее структуру таблиц
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327154
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не выспался наверное :)
Спасибо
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327169
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут есть другая проблема.

результат примерно такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
Заказ.Реф №     Заказ.Количество      Касса.Приход    Касса.Расход
     1 \ 23                 2                     45                      
     1 \ 23                 2                                     56 
     1 \ 23                 2                     78    
     2 \ 43                 3                     65 
     2 \ 43                 3                                     98 

Далее мне необходимо провести анализ, т.е., например, посчитать общее кол-во путевок "Заказ.Количество", а как это сделать, если эти числа дублируются?
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327184
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле тут вообще полная задница получается, на самом деле во вторичной выборке поиск идет в двух таблицах (Банк и Касса), т.е. дублируется вообще вся информация :(
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327206
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю вернуться к началу топика...
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327460
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>результат примерно такой:
Заказ.Реф № Заказ.Количество Касса.Приход Касса.Расход
1\23 2 45
1\23 2 56
1\23 2 78
2\43 3 65
2\43 3 98

А если сгруппировать по Заказ.Реф № ???
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327472
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял вопрос, то ответ на него называется лефт джойн.
Select * from cash left join (select * from orders where ...) on (cash.RefN=orders.RefN)
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327475
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Предлагаю вернуться к началу топика...

Вместо OR попробуй IN.

Или используй forms("MyForm").Filter как условие отбора записей по кассе. А далее и вправду Group By напрашивается.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327608
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
Заказ.Реф №     Заказ.Количество      Касса.Приход    Касса.Расход
     1 \ 23                 2                     45                      
     1 \ 23                 2                                     56 
     1 \ 23                 2                     78    
     2 \ 43                 3                     65 
     2 \ 43                 3                                     98 

Какой тут в попу Group By? :)
Если добавить Group By, то ничего не измениться!!!

-----
Вот такой лэфт джойн приводит к описанному выше.
Код: plaintext
1.
2.
SELECT Orders.*, Cash.*, Bank.*
FROM (Orders LEFT JOIN Bank ON [Orders].[Реф №]=[Bank].[Реф №]) LEFT JOIN Cash ON [Orders].[Реф №]=[Cash].[Реф №]
WHERE ((([Orders].[Реф №])=[Forms]![форма3]![ref]))

----

Geo
Ошибка синтаксиса там где-то
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327712
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тады попробуй покувыркайся с коррелирующими запросами типа:

Select t1.[Реф №], t1.Количество, (Select Касса.Приход From
Касса Where t1.[Реф №] = Касса.[Реф №]) As Приход,(Select
Касса.Расход From
Касса Where t1.[Реф №] = Касса.[Реф №]) As Расход
From Заказ
Where...
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327714
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон!

From Заказ As t1
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327717
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять Пардон! Не зная структуры...
Может быть и так
Select t1.[Реф №], Count(t1.[Реф №]) as Количество, (Select Касса.Приход From
Касса Where t1.[Реф №] = Касса.[Реф №]) As Приход,(Select
Касса.Расход From
Касса Where t1.[Реф №] = Касса.[Реф №]) As Расход
From Заказ As t1
Where...
Group By t1.[Реф №]
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327722
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И, наконец, последний пардон!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Select t1.[Реф №], Count(t1.[Реф №]) as Количество, 
   (Select 
   Sum(Касса.Приход) From 
    Касса Where t1.[Реф №] = Касса.[Реф №]) As Приход, 
  (Select Sum(Касса.Расход) From 
    Касса Where t1.[Реф №] = Касса.[Реф №]) As Расход 
From Заказ As t1 
Where... 
Group By t1.[Реф №]
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327729
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мистер Пардон
---
С запросами косяк
Решил написать функцию, создающуюю временную таблицу и засовывающую туда то, что нужно :)
Спасибо
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327731
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мистер многоступенчатая выборка!

А ты их попробовал?
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327738
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Решил написать функцию, создающуюю временную таблицу и засовывающую туда то, что нужно
В mdb при многопользовательском доступе кучу всего предусмотреть придется. А запросы, того типа, что я тебе настругал у меня работают без проблем и быстро.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327743
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю эти вложенные Select с Where будут изрядно тормозить, если таблица более менее приличиная, в своих запросах я очень часто поэтому отказываюсь от таких сложных запросов в пользу скорости через создание временных таблиц.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327752
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Select t1.[Реф №], Count(t1.[Реф №]) as Количество, 
   (Select 
   Sum(cash.Приход) From 
    cash Where t1.[Реф №] = cash.[Реф №]) As Приход, 
  (Select Sum(cash.Расход) From 
    cash Where t1.[Реф №] = cash.[Реф №]) As Расход 
From orders As t1 
Where orders.[Реф №] = forms!форма3!ref
Group By t1.[Реф №]

Такой запрос возвращает недублирующуюся информацию, но по всем заказам ([Реф №])
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327762
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Думаю эти вложенные Select с Where будут изрядно тормозить
Если их формировать на клиенте, то, наверное. Но, если mdb, то как создавать временные таблицы для многопользовательской работы?
Create Table #Tb1 здесь не прокатит. Значит будет создаваться постоянная таблица (а ну как ее уже другой создает?). Проверять наличие? Добавлять RND()? Отнюдь не гарантия уникальности...
И потом лучше все-таки проверить на своей БД, что быстрее работает сложный (кстати не супер) запрос или создание таблицы, заполнение, затем выборка из нее.
Хотя в adp я очень часто их использую, чтобы не заморачиваться со сложными запросами.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327776
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри условие!

автор писал: потом по отфильтрованным заказам

Forms("FormName").Filter - возвращает строку фильтра по форме FormName
попробуй эту конструкцию подставить в Where (врать не буду, сам не пробовал вставлять в сохраненный запрос) а уж при формировании запроса программно подставить это в условия и вовсе нет проблем, как "мне ка-а-а-ается".
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327801
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Forms("FormName").Filter
Форма не имеет иточника данных.
---
Количетсво заказов в выборке колеблется от 0 до бесконечности :).
В таком запросе это можно учесть только путем предложенным мною в начале топика. А этот "путь" не поддерживает большое число заказов.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327836
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Forms("FormName").Filter
Если фильтруется вложенная форма, тогда Forms("FormName").SubForm1.Form.Filter
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327857
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никакая форма не фильтруется :)
Данные фильтруются за кулисами и отображаются в форме
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327894
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему вот такой запрос возвращает информацию по всем заказам не зависимо от значений в полях формы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT t.[Реф №], t.[Наименование],t.[Потребитель], t.[Эквивалент], t.[Количество], 
(SELECT sum(calc.Эквивалент2) from calc WHERE calc.[реф №] =t.[реф №]) AS Себестоимость, 
(SELECT sum(cash.Эквивалент1) from cash Where cash.[реф №] = t.[реф №]) AS Приход_к, 
(SELECT sum(bank.Эквивалент1) from bank Where bank.[реф №] = t.[реф №]) AS Приход_б,
(SELECT sum(cash.Эквивалент2) from cash Where cash.[реф №] = t.[реф №]) AS Расход_к,
(SELECT sum(bank.Эквивалент2) from bank Where bank.[реф №] = t.[реф №]) AS Расход_б
FROM Orders as t
WHERE (t.[реф №]=[forms]![форма3]!ref Or [forms]![форма3]!ref Is Null) 
And t.[дата начала] Between [forms]![форма3]!dates And [forms]![форма3]!datepo
Or ([forms]![форма3]!dates Is Null And [forms]![форма3]!datepo Is Null) 
And t.[наименование]=[forms]![форма3]!direction Or [forms]![форма3]!direction Is Null;
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327903
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
По-моему, там не хватает скобок. Кто помнит, что старше, And или Or?
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327907
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да чтоб голову не ломать действительно лучше скобки расставить.
А вообще старше AND
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327918
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно дело в скобках, но как их расставить не знаю уже по всякому покрутил - не получается :(
По-моему так должно работать
Код: plaintext
1.
2.
3.
WHERE (t.[реф №]=[forms]![форма3]!ref Or [forms]![форма3]!ref Is Null) 
And ((t.[дата начала] Between [forms]![форма3]!dates And [forms]![форма3]!datepo) 
Or ([forms]![форма3]!dates Is Null And [forms]![форма3]!datepo Is Null)) 
And (t.наименование=[forms]![форма3]!direction Or [forms]![форма3]!direction Is Null);
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327924
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Пока получилось так:

Код: plaintext
1.
2.
WHERE ( 1 ) 
And (( 2 ) Or ( 3 )) 
And ( 4 );

где

Код: plaintext
1.
2.
3.
 1  = t.[реф №]=[forms]![форма3]!ref Or [forms]![форма3]!ref Is Null
 2  = t.[дата начала] Between [forms]![форма3]!dates And [forms]![форма3]!datepo
 3  = [forms]![форма3]!dates Is Null And [forms]![форма3]!datepo Is Null
 4  = t.наименование=[forms]![форма3]!direction Or [forms]![форма3]!direction Is Null

Выглядит правдоподобно.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327925
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я и сделал, но не работает :(
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327927
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Не работает в каком случае? Кто Null, а кто нет?
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327928
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой стоп
все работает
просто почему-то после введения значения в поле нужно было обновить форму
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327931
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Тогда теперь делай RollBack всему форуму.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327932
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Многоступенчатая выборка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]