powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SQL + Телефонная станция = с:-)
9 сообщений из 9, страница 1 из 1
SQL + Телефонная станция = с:-)
    #32067888
boar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация:
Я получаю данные из телефонной станции "TelePOK":
[DialID], [LocalLine], [PhoneNum], [Date], [Time], [Duration]
и у меня есть справочник тарифов "Tarif":
[ID], [TelKod], [Destination], [Zone], [UnitPrice]

Задача:
Получить на выходе:
[DialID], [LocalLine], [PhoneNum], [Date], [Time], [Duration], [Destination], [Zone], [UnitPrice]
...
Рейтинг: 0 / 0
SQL + Телефонная станция = с:-)
    #32067896
Дык а как они связаны, эти два набора? По какому полю, признаку? И, кстати, ответ нужен в виде чего, строки SELECT?
...
Рейтинг: 0 / 0
SQL + Телефонная станция = с:-)
    #32067911
boar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот втом-то и заморочка:
если есть номера
826222456
369874
963214
826954567
826545698
и коды:
826 - A
8269 - B
8265 - C
соответственно:
826222456 - A
369874 - "?"
963214 - "?"
826954567 - B
826545698 - C
...
Рейтинг: 0 / 0
SQL + Телефонная станция = с:-)
    #32067925
из вашего последнего сообщения непонятно:
- какие значения содержит [TelKod],
- что такое A, B, C - это данные? где?
- что делать со знаками вопроса - "?" Нераспознанные? Или местные?
...
Рейтинг: 0 / 0
SQL + Телефонная станция = с:-)
    #32067949
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIALED
[DialID], [PhoneNum]

TARIF
[ID], [TelKod], [UnitPrice]

SELECT_RESULT
[PhoneNum], [UnitPrice]

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT a.[PhoneNum], b3.[TelKod] AS TelKod3, b2.[TelKod] AS TelKod2, b1.[TelKod] AS TelKod1,
IF(LEN(b3.[TelKod])>= 3 ,b3.[TelKod],
  IF(LEN(b2.[TelKod])>= 2 ,b2.[TelKod],
    IF(LEN(b1.[TelKod])>= 1 ,b1.[TelKod],""
  )
) AS RES_TEL_KOD
FROM DIALED a LEFT JOIN (
  TARIF b3 LEFT JOIN (
    TARIF b2 LEFT JOIN TARIF b1 ON LEFT(b2.[TelKod], 1 )=LEFT(b1.[TelKod], 1 )
  )ON LEFT(b3.[TelKod], 2 )=LEFT(b2.[TelKod], 2 )
)b3 ON LEFT(a.[PhoneNum], 3 )=LEFT(a.[TelKod], 3 )


Принцип наверное такой! А конкретное решение надо на базе ковырять!
...
Рейтинг: 0 / 0
SQL + Телефонная станция = с:-)
    #32068050
boar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2mahoune
А может можно пояснить?

Надо создать запрос который определил бы код телефонного номера (таблица 1 ) и из справочника кодов и тарифов (таблица 2 ) определил цену на разговоры... Ну а те коды которые не знает проигнорировал бы... и последнее, местные номера шестизначные
...
Рейтинг: 0 / 0
SQL + Телефонная станция = с:-)
    #32068078
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смысл всего моего запроса в следующем!
Изначально тебе надо понять какой тариф применить к набранному номеру! Но как я у тебя посмотрел тарифные зоны пересекаются, пример:
826 и 8269
из чего следует, что надо разобрать сначала максимальный по длинне описанную тарифную зону! Что-б понять какая зона была использована при звонке можно воспользоваться 2-мя вариантами!
Не универсальный! Взять за максимум определяющий тарифную зону 4 символа и делать соответственно 4 JOIN одной и той-же таблицы тарифы под разными алиасами к таблице звонков. Выбираем наибольее совпавшиую тарифную зону из поля и в соответствии с ней и тариф!
Это то что я и применил!

Вариант второй - Универсальный. Выбрать из таблицы тарифы код зоны и его длинну (символов). Потом находим код зоны совпавший по максимальному кол-ву символов с набранным номером и выводим его!
...
Рейтинг: 0 / 0
SQL + Телефонная станция = с:-)
    #32068084
psl@mailru.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для приведенных таблиц связь должна быть через функцию
dialed like telcode+'%'
или
telcode=left(dialed,len(telcode))
причем по тестам like быстрее работает.

Например
select * from
calls left outer join codes
on dialed like telcode+'%'

Для того чтобы коды были у всех - добавь коды 1,2,3,4,5,6,7,9 как город по цене города - все равно ведь придется добавить 8095

Есть вариант преобразовывать дайледы в международный формат (мне не нравится, но имеет смысл если городских мало)

далее возникнет новая проблема - как из двух одинаково начинающихся кодов выбрать более подходящий
но это уже совсем другая история
...
Рейтинг: 0 / 0
SQL + Телефонная станция = с:-)
    #32068087
psl@mailru.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
под % я имел в виду *
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SQL + Телефонная станция = с:-)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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