Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перестановки по условию / 12 сообщений из 12, страница 1 из 1
21.06.2016, 03:43
    #39259272
Сева Новгородцев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
Здравствуйте, уважаемые гуру и знатоки SQL. Столкнулся с нетривиальной задачей для меня. Решить правильно у меня не выходит. В БД находятся две таблицы. Мне необходимо составить запрос, показывающий все перестановки некоторых полей из первой таблицы, используя условия из второй таблицы. Запросы я составил, но "дьявол кроется в деталях", как говорится. Время выполнение этих запросов ... Даже не знаю как и сказать... В общем, виснет у меня Access. Либо вычислительная мощность Access-а не позволяет ему справиться с этими запросами, либо составлены они неправильно. А возможно нужен совершенно другой подход.

Самый "рабочий" вариант у меня, это запрос AllResult (для всех записей второй таблицы) и CertainValueResult (для определённой записи второй таблицы). AllResult я даже протестировать не могу. А для CertainValueResult время выполнения, по моему, в лучшем случае ЧАС! Ведь если все поля будут выбраны, то количество перестановок должно быть около 22 млн!

Когда Вы откроете БД, то поймёте лучше. А пока: во второй таблице (Table - B) хранятся данные логического типа для выбора полей из первой таблицы (Table - A) для генерации перестановок. Если Да - поле участвует в перестановках, если нет - пустое значение.
...
Рейтинг: 0 / 0
21.06.2016, 07:46
    #39259290
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
Сева Новгородцев,
22 млн записей .... ну, ты даешь .... оперативная память то компьютера у тебя , наверное, не безгранична? а? и файл базы данных , наверное, имеет ограничение в 2 Гб, не?
...
Рейтинг: 0 / 0
21.06.2016, 09:04
    #39259336
Сева Новгородцев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
Да, я понимаю, что это перебор. Но, как я думаю, дело не в количестве записей (в первую очередь). Например, для записи № 33 из таблицы "Table - B" должно быть всего лишь 168. Но и здесь зависает.
...
Рейтинг: 0 / 0
21.06.2016, 11:38
    #39259467
Alex Pancho
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
авторКогда Вы откроете БД, то поймёте лучше.

Открыл... да.... 22 миллиона записей вам явно будет мало...
Вам эту базу готовую всунули ии сами старались?
Нормализации нет вообще от слова совсем.
Вот зачем вам писать одиннадцать запросов на выборку поля, отражаемого значения и условия, когда это можно сделать в одном запросе? Имена таблиц с пробелами и знаками минут - зло. Переименуйте.
Дальше, у вас результат селекта запросов - 4 поля, а подставляете вы в одно. И какое Ац должен выбрать по вашему? там должен быть инер джоин а не ииф, может тогда заработает.
Короче, попинал я вашу базу, но суть запроса и структуру не понял, так что так...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SELECT DISTINCT 
IIf(TabB.TP1=True,TabB.TP1,0) AS GTP1, 
IIf(TabB.TP1=True,TabB.TP1,0) AS TP1, 
IIf(TabB.TP2=True,TabB.TP2,0) AS GTP2, 
IIf(TabB.TP2=True,TabB.TP2,0) AS TP2, 
IIf(TabB.TP3=True,TabB.TP3,0) AS GTP3, 
IIf(TabB.TP3=True,TabB.TP3,0) AS TP3, 
IIf(TabB.TP4=True,TabB.TP4,0) AS GTP4, 
IIf(TabB.TP4=True,TabB.TP4,0) AS TP4, 
IIf(TabB.TP5=True,TabB.TP5,0) AS GTP5, 
IIf(TabB.TP5=True,TabB.TP5,0) AS TP5, 
IIf(TabB.TP6=True,TabB.TP6,0) AS GTP6, 
IIf(TabB.TP6=True,TabB.TP6,0) AS TP6, 
IIf(TabB.TP7=True,TabB.TP7,0) AS GTP7, 
IIf(TabB.TP7=True,TabB.TP7,0) AS TP7, 
IIf(TabB.TP8=True,TabB.TP8,0) AS GTP8, 
IIf(TabB.TP8=True,TabB.TP8,0) AS TP8, 
IIf(TabB.TP9=True,TabB.TP9,0) AS GTP9, 
IIf(TabB.TP9=True,TabB.TP9,0) AS TP9, 
IIf(TabB.TP10=True,TabB.TP10,0) AS GTP10, 
IIf(TabB.TP10=True,TabB.TP10,0) AS TP10, 
IIf(TabB.TP11=True,TabB.TP11,0) AS GTP11, 
IIf(TabB.TP11=True,TabB.TP11,0) AS TP11
FROM TabB;


Вот такой запрос вместо вашего алл-реса работает за секунду. Подумайте, почему.
...
Рейтинг: 0 / 0
21.06.2016, 12:28
    #39259531
Сева Новгородцев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
Alex Pancho, большое спасибо за ответ и потраченное время.
1. Ваш запрос - это аналог таблицы [Table - B]. Я не понял, для чего он нужен.
2. Пример того, что я хочу получить на рисунке.
Код: plsql
1.
2.
3.
SELECT DISTINCT [Table - B].TP_PermID, IIf([Table - B].TP1=True,TP1.DisplayAs,Null) AS TP1, IIf([Table - B].TP2=True,TP2.DisplayAs,Null) AS TP2, IIf([Table - B].TP3=True,TP3.DisplayAs,Null) AS TP3, IIf([Table - B].TP4=True,TP4.DisplayAs,Null) AS TP4, IIf([Table - B].TP5=True,TP5.DisplayAs,Null) AS TP5, IIf([Table - B].TP6=True,TP6.DisplayAs,Null) AS TP6, IIf([Table - B].TP7=True,TP7.DisplayAs,Null) AS TP7, IIf([Table - B].TP8=True,TP8.DisplayAs,Null) AS TP8, IIf([Table - B].TP9=True,TP9.DisplayAs,Null) AS TP9, IIf([Table - B].TP10=True,TP10.DisplayAs,Null) AS TP10, IIf([Table - B].TP11=True,TP11.DisplayAs,Null) AS TP11
FROM TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, [Table - B]
WHERE ((([Table - B].TP_PermID)=[Enter certain TP_PermID: ]));


3. БД мне попалась в этом виде. Менять ничего мне нельзя.
...
Рейтинг: 0 / 0
21.06.2016, 12:55
    #39259563
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
Alex Pancho-
Нормализации нет вообще от слова совсем....
-
Сева Новгородцев...3. БД мне попалась в этом виде. Менять ничего мне нельзя....-есть самолет, но он не летает
-так приделайте крылья
-не мне менять ничего нельзя
-а без крыльев он не взлетит,однако
...
Рейтинг: 0 / 0
21.06.2016, 15:42
    #39259737
Сева Новгородцев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
Уверен, что "предыдущий оратор" даже БД не открыл. Лишь бы ляпнуть...
...
Рейтинг: 0 / 0
21.06.2016, 16:00
    #39259750
Alex Pancho
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
Сева Новгородцев,
зря вы так, вам же ж помочь хочется.
Вот вам кортинко с подробностями


...
Рейтинг: 0 / 0
21.06.2016, 16:10
    #39259763
Сева Новгородцев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
Спасибо конечно, но для чего Вы демонстрируете мне [Table - A]? Я из неё получаю данные для группировки (запросы TP(i)). Данные получаю корректные (можете мне поверить). Больше мне эта таблица не нужна. Остальная работа должна заключаться в группировке результатов запросов TP(i), согласно условиям из таблицы [Table - B].
...
Рейтинг: 0 / 0
21.06.2016, 16:13
    #39259767
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
Сева Новгородцев... А возможно нужен совершенно другой подход... Вы неправы-БД я смотрел.С такой структурой,да на больших объемах(ведь при меньшем количестве данных вопрос не возникал) не взлетит
...
Рейтинг: 0 / 0
21.06.2016, 16:22
    #39259774
Сева Новгородцев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
sdku, извините, погорячился...
Может быть попробовать с помощью vba формировать запросы (для каждой строки [Table - B]) только с действующими TP (=True); таким образом, отпадают постоянные проверки условий.
...
Рейтинг: 0 / 0
21.06.2016, 17:56
    #39259835
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестановки по условию
Сева Новгородцев,
не связанные таблицы-чем не Ёксель. Без изменения структуры, сколько бы Вы не изощрялись ничего не выйдет-только комп будет впадать в ступор
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перестановки по условию / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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