|
|
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Кто-нибудь из опытных пользователей/программистов MS Access может подсказать мне оптимальное решение проблемы? Суть в следующем - в базе данных MS Access международной телефонной компании необходимо создать статистический отчет, который бы показывал, по каким направлениям чаще всего звонят клиенты. В базе имеется таблица, куда пишутся все данные о совершенных звонках с полем Destinaton (набранный номер), а также таблица с международными кодами стран. Так вот мне непонятно, каким образом мне, на основе этих двух таблиц, построить запрос, который бы сравнивал начальные символы поля Destination (текст) из первой таблицы с полем Codes (текст) из второй, отсеивая записи по этим кодам, потому что дальше все понятно - группировка по кодам, подсчет количества звонков при помощи поля МЕМО и вывод результатов запроса в отчет. Или SQL на такое не способен, надо писать процедуру на VBA? Заранее благодарен за возможную помощь и советы. P.S. Перелопатил все, что только можно, включая и этот форум - так и не нашел способа решить проблему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 14:26 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
ну вообще можно создать запрос, в котором уже отрезать эти 4 символа, а далее завязываешься уже с этим запросом на сравнение, а почему бы не отрезать код еще при встаке записи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 14:37 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
sorry\r \r /topic/15898 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 14:49 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
Спасибо, Sinner, но второе, к сожалению, невозможно, т.к. фактически эта таблица представляет собой журнал работы системы и поля ее заполняются аналогично лог-файлу и используются потом в других отчетах. А первое - к сожалению, везде надо отрезать разное количество первых символов, от двух до четырех, так что этот вариант тоже не покатит. Видимо, придется сравнивать значения. А как это грамотно сделать, я без понятия. :-(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 14:53 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
Погодите, а почему нельзя так: select * from Table1 where A like (select B from Table2) & "*" Я не пробовал, но вдруг... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 15:25 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
правильно но очень долго... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 15:30 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
А так: select * from Table1 where A like (select B & "*" from Table2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 15:33 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
ну долго!!! пока он проверит все записи из Table2 в соответствии с Table1 да еще и like... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 15:37 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за ответы и советы, но что-то ничего у меня так и не работает, ни Ваша подсказка, Boar, ни Ваша, Владимир Саныч. На попытку внесения этих строк, порекомендованных Вами, Boar, в запрос непосредственно в режиме SQL Access пишет сообщение об ошибке (пропущен оператор - какой оператор, и где он пропущен, непонятно...) и отказывается его запускать. А Ваша рекомендация, Владимир Саныч, работает, только после запуска выдается надпись, что подчиненный запрос может сформировать не более одной строки, а по нажатию ОК никакого результата не выдается. Или, может я Вас не понимаю и делаю все неправильно?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 16:08 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
Да нет, раз boar говорит, что мой вариант будет работать медленно, то я его снимаю. Нет смысла его отлаживать. А вообще, странно мне, что даже при наличии индекса не удается ускорить поиск по начальной части строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 16:12 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
пришли мне урезанную базу и будет видно.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 16:31 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
Предлагаю сначала сгруппировать по кодам (выборка с одной таблицы), а потом уж по странам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 19:38 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
Варианта 2 1) Использовать в запросе VBA(Len и Like) Where Left(Значение1,Len(Значение2))=Значение2 2) Like where like Значение1 like (Значение2 + '*') Другие варианты в голову не пришли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2003, 17:46 |
|
||
|
Вопрос к Аксакалам :-)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Здесь Calls - данные о совершенных звонках, Codes - таблица с кодами стран. А дальше группируйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2003, 18:04 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32130353&tid=1681964]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 407ms |

| 0 / 0 |
