|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
Excel 2013. Доброго дня! Столкнулся с такой проблемой. Есть условно две таблицы, которые нужно импортировать из Access и объединить: T1 с полями KOD, Name, Date, G1, G2, GX... (около 200 000 записей) T2 с полями KOD, Group, DateIn (около 8 000 записей) Их нужно объеденить чтобы добавить в T1 поле Group Объединение по полям KOD но в Т2 это поле не уникально, есть вариации записей по полям DateIn и искомому Group. Поэтому должно соблюдаться еще одно условие Date = MAX(диапазон DateIn, где DateIn <=Date) С импортом в Эксель проблем нет, проблемы с объединением (что в Access, что в Эксле) Написал такой вот SQL. Код: plsql 1. 2. 3.
Вложенный запрос сам по себе работает, но как тольок его вставляю во внешний - запрос начинает отработку и зависает. В Excell - сразу, в Access при попытке получить все резульаты запроса (а так оказывает видимые строки на экране, общее кол-во записей не выводит). Может кто знает как модифицировать запрос, чтобы он заработал ? Например можно ли заменить вложенный запрос LEFT JOIN ? Ума не приложу как это сделать. Отчегото кажется что JOIN не должен зависать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 11:42 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
Для начала, хорошо бы индекс на T2 (KOD, DateIn) include(Group) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 12:52 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
aleks222Для начала, хорошо бы индекс на T2 (KOD, DateIn) include(Group) Спасибо. А можно подробнее ? А то я не силен в SQL. У меня T1 - таблица в Accrss T2 - файл Эксель. Я могу создать индекс для T2 прямо в SQL запросе ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 13:06 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
Чёта типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 13:35 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
PS. Подзапрос лучше сделать статическим запросом, и использовать именно его, а не его текст. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 13:35 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
igor.kovalchuk Есть условно две таблицы, которые нужно импортировать из Access и объединить: T1 с полями KOD, Name, Date, G1, G2, GX... (около 200 000 записей) T2 с полями KOD, Group, DateIn (около 8 000 записей) igor.kovalchukУ меня T1 - таблица в Accrss T2 - файл Эксель. Какое из утверждений верно? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 13:36 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
igor.kovalchukaleks222Для начала, хорошо бы индекс на T2 (KOD, DateIn) include(Group) Спасибо. А можно подробнее ? А то я не силен в SQL. У меня T1 - таблица в Accrss T2 - файл Эксель. Я могу создать индекс для T2 прямо в SQL запросе ? Нет. Не могешь. Импортируй таблицу экселя в аксесс. Приделай к ней индекс. И будет тебе щастье. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 13:40 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
sdkuigor.kovalchuk Есть условно две таблицы, которые нужно импортировать из Access и объединить: T1 с полями KOD, Name, Date, G1, G2, GX... (около 200 000 записей) T2 с полями KOD, Group, DateIn (около 8 000 записей) igor.kovalchukУ меня T1 - таблица в Accrss T2 - файл Эксель. Какое из утверждений верно? Как бы два в зависимост от ситуации:) Кода тестировал в Accesse - то файл T2 подключил как соединее (внешних данные) к базе. Но реализовать код нужно все равно в Экселе. А там у меня получается что T1 тяну с Access, а T2 с файла эксель. T2 будет может изменяться пользователями, потому втягивать ее в Access нету смысла (на рабочих местах нету Access), а T1 - статичный файл базы данных. Результат объединения потом запизиваю в кєш сводной таблицы, что бы с ней пользватели (в т.ч и я) уже могли работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 13:43 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
igor.kovalchuk, Стесняюсь спросить:а какие значения в поле Т2.KOD,откуда они там берутся и почему ..WHERE T1.KOD=T2.KOD... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 14:03 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
AkinaЧёта типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Заработало, вы гений ! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 14:14 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
Думаю, что правильнее Т2 не присоединять, а импортировать. После чего проиндексировать поля KOD и DateIn, а также тип поля KOD сделать таким же, как в Т1. Если данные в Экселе меняются - очистить таблицу и залить новые. Кроме того: Имя Group относится к зарезервированным словам Jet (как, кстати, Name и Date), поэтому в запросе его надо брать в квадратные скобки; Вы уверены, что комбинации значений KOD и DateIn не дублируются? Иначе ваш SELECT TOP 1 захочет вернуть более 1 записи, что в вашем случае недопустимо; В запросе вы не учли условие DateIn <=Date). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 14:15 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Спасибо, по Group, тут лоханулся, на скорую руку писал :) , потому как код запроса я написал на форуме не с оригинала а условный, с измененными названиями для удобства чтения. Код Akina отработал замечатльно. Щас буду изучать результирующую таблицу. Все выглядит очень просто. Есть 3 статичных таблицы в отедльных файлах Acсess, со временем их будет больше. Я их запросом через UNION соединяю и импортрую на лист в Ексель. Это моя T1 Также импортирую на другой лист Эксель таблицу. Это T2 Но мне нужен результат их соединения. А вот это у меня не заладилось. Потом запихиваю рекордсет в кэш сводной таблицы. И все. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 14:25 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
igor.kovalchukAkinaЧёта типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Заработало, вы гений ! :) Рано я обрадовался :( В общем в поле sGroup (буду его так называть) подтягивается не правильно. Смысл запроста был в том, что у каждого KD для разной Date в T1 нужно из T2 вытянуть sGroup. T2 нужна, чтобы отслеживать перемещение KD по группам с течением времени. Вот так оно примерно все выгядит: T1 T2 KOD Date Name KOD DateIn sGroup Name 1 31.12.2014 Петя 1 01.01.1900 Тигры Петя 2 31.12.2014 Маша 2 01.01.1900 Львы Маша 1 31.12.2015 Петя 3 01.01.2016 Орлы Коля 2 31.12.2015 Маша 1 01.01.2016 Львы Петя 1 31.12.2016 Петя 2 31.12.2016 Маша 3 31.12.2016 Коля Ожидаемый результат KOD Name Date sGroup 1 Петя 31.12.2014 Тигры 2 Маша 31.12.2014 Львы 1 Петя 31.12.2015 Тигры 2 Маша 31.12.2015 Львы 1 Петя 31.12.2016 Львы 2 Маша 31.12.2016 Львы 3 Коля 31.12.2016 Орлы Смотрим на Петю. Он в 2016 переместился из одной группы в другую. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 14:48 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 14:51 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
igor.kovalchukAkinaЧёта типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Заработало, вы гений ! :) Понял, почему Ваш вариант не работает правильно. q1 выполянется всего 1 раз только для какой-то скорее всего первой записи с t1.Date А потом из нее черпаются данные для всех остальных записей, что не есть верно, так как в них t1.Date будет менятся и соответсвенно должна менятся выборка q1. По єтой логике я и запихнул заивисмій вложенный запрос на пересчет в каждой записи, что почему-то и завешивает Эксель/Ассеss. Учитывая, что у меня t1.Date меняется редко (всего несколько раз). Можно ли как то принудительно инициировать пересчет q1 при изменении в поле t1.Date ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 15:32 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
igor.kovalchuk, пожалуйста,сформулируйте стоящую перед Вами задачу типа: имеются две таблицы,при внесении новой записи в таблицу1 пересчитать таблицу2 в соответствии с новыми данными,для тех записей в которых полеN=полюM новой записи в таблице1 (и все-таки откуда берутся кодовые значения в Т2-насколько я помню в Ёкселе нет счетчика-если же это поле(ячейка) заполняется ручками-ошибки неизбежны.Может вообще все решать в Ёкселе-для чего обращение к Access) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 16:00 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
Попробовал переписать вариант Akina с JOIN. SELECT t01.*, t02.[Группа] FROM ([temp$] as t01 LEFT JOIN [Firms$] as t02 ON t01.KD = t02.KD) LEFT JOIN (SELECT t12.KD, MAX (t12.[Год_вхождения]) as [Год_вхождения] FROM [temp$] as t11, [Firms$] as t12 WHERE t11.KD = t12.KD AND CDATE(t11.[sYear]) >= CDATE(t12.[Год_вхождения]) GROUP BY t12.KD) as q1 ON (t02.KD = q1.KD) AND (t02.[Год_вхождения] = q1.[Год_вхождения]) Работает быстро, но опять не то. На каждый [KD] у которого менялась [Группа] теперь в таблице есть две дублирующиеся записи : одна со старой, дурная с новой Группой. Помогите пожалуйста , как переписать JOIN, чтобы устранить дубляжи ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 16:08 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
igor.kovalchukq1 выполянется всего 1 раз только для какой-то скорее всего первой записи с t1.Date А потом из нее черпаются данные для всех остальных записей,Нет. Проблема в том, что Вы так и не смогли сформулировать задачу нормально. В частности, не указали, что поле KOD, блин, НЕ УНИКАЛЬНОЕ. Соответственно мой запрос решает совсем иную задачу. Короче - тест-БД в студию. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 16:11 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
sdku, Смотрите. У меня есть таблица из базы статистики T1. Поле KOD в ней уже заполнено. Это не счетчик. Поле Date - это дата на которую представлены данные. (по сути - последняя дата года отчетности, но это не важно) Таблица T2. Это по сути справочник в котором практически для каждого KOD T1 проставлен признак sGroup, и DateIn - дата с которой этот признак ему присвоен. Мне нужно объединить эти две таблицы так, чтобы в таблицe T1 добавилось поле sGroup и в каждой записи для которой T1.KOD=T2.KOD в этом поле стояло значение из T2.sGroup для максимальной T2.DateIn не превышающей дату отчетности T1.Date/ выше я нарисовал условную структуру таблиц и ожидаемый результат их обїединения. Для наглядности. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 16:18 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
AkinaКороче - тест-БД в студию. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 16:36 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
Akina, Да, наверно нечетко сфомулирвоал задачу. Если бы KOD был уникальным, то мне бы не потребовались бы танцы с полем Date и DateIn. Тест-БД в студию. Подойдет, если это будут условные данные на двух листах в экселе в которые уже залиты данные из исходников ? В принципе я уже объединяю с листов в Эксле. Щас он выдает ошибку потому что решил сделать INNER JOIN. Никак не пойму почему ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 16:49 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
igor.kovalchuk, ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 16:50 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
igor.kovalchukМне нужно объединить эти две таблицы так, чтобы в таблицe T1 добавилось поле sGroup и в каждой записи для которой T1.KOD=T2.KOD в этом поле стояло значение из T2.sGroup для максимальной T2.DateIn не превышающей дату отчетности T1.Date/ так попробуйте Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 17:13 |
|
Зависает SQL-запрос содержащий вложенный зависимый запрос
|
|||
---|---|---|---|
#18+
igor.kovalchuk, Корявый пример. Там Группы не расписаны. Перевкладываю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 18:55 |
|
|
start [/forum/topic.php?fid=45&msg=39523322&tid=1612073]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 300ms |
total: | 450ms |
0 / 0 |