powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запросом разделить одну запись на несколько
18 сообщений из 18, страница 1 из 1
запросом разделить одну запись на несколько
    #35184086
Rustemmus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть таблица1 с примерно такими записями:

Destination Pref ExPref
Israel mobile 972 5, 6
Uzbekistan 998
Uzbekistan, Tashkent 998 711, 712, 713
Armenia 374
Строки, где в поле ЕхPref есть несколько значений, нужно разделить на несколько записей, и получить такую таблицу2:

Destination Pref
Israel mobile 9725
Israel mobile 9726
Uzbekistan 998
Uzbekistan, Tashkent 998711
Uzbekistan, Tashkent 998712
Uzbekistan, Tashkent 998713
Armenia 374
Можно ли преобразовать (или получить новую) таблицу SQL запросом?
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184106
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное проще, надежнее и гибче будет пробежаться циклом по рекордсету.
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184148
sdfgsdfgsdf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и запрососм (при условии что цифри 998 711, 712, 713 хранятся в отдельных полях а не в одном и через запятую...)
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184168
_restavraciya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> а не в одном и через запятую
Очень может быть что Ежик или Боним или кто-то еще смогут и это обойти
Задача в размножении записей
На сколько из размножить = ubound(split((ExPref,',')))-lbound(split(ExPref,','))
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184179
sdfgsdfgsdf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДЫк... оно то понятно.... но КАК ? В столбцах ?? или в столбце через запатую ???, насяльника ? как ?
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184185
_restavraciya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дык если бы я знал , то сам бы написал пример
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184211
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть дополнительная таблица с последовательными номерами от 1 до n, где n максимальное количество элементов в поле ExPref, то получить искомое можно таким запросом (таблица Номер - доп.таблица, в ней поле counter)
Полный запрос на выборку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT  t.Destination, t.Pref
FROM TelKod t
where  t.Expref  is null
Union All
SELECT  t.Destination, t.Pref & fkodtel(t.Expref,n.counter) as ff
FROM TelKod t, Номер n,
t inner join n on len(t.Expref) - len(replace(t.Expref,",",""))+ 1 >=n.counter
where  t.Expref  is not null
Ну, а дальше либо вставлять данные в новую таблицу, либо просто выборка автор написал не очень точно.


Если в новую таблицу, то
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Select * into НоваяТаблица
From
(SELECT  t.Destination, t.Pref
FROM TelKod t
where  t.Expref  is null
Union All
SELECT  t.Destination, t.Pref & fkodtel(t.Expref,n.counter) as ff
FROM TelKod t, Номер n,
t inner join n on len(t.Expref) - len(replace(t.Expref,",",""))+ 1 >=n.counter
where  t.Expref  is not null) as q
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184224
sdfgsdfgsdf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_worldЕсли есть дополнительная таблица с последовательными номерами от 1 до n, где n максимальное количество элементов в поле ExPref, то получить искомое можно таким запросом (таблица Номер - доп.таблица, в ней поле counter)
Полный запрос на выборку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT  t.Destination, t.Pref
FROM TelKod t
where  t.Expref  is null
Union All
SELECT  t.Destination, t.Pref & fkodtel(t.Expref,n.counter) as ff
FROM TelKod t, Номер n,
t inner join n on len(t.Expref) - len(replace(t.Expref,",",""))+ 1 >=n.counter
where  t.Expref  is not null
Ну, а дальше либо вставлять данные в новую таблицу, либо просто выборка автор написал не очень точно.


Если в новую таблицу, то
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Select * into НоваяТаблица
From
(SELECT  t.Destination, t.Pref
FROM TelKod t
where  t.Expref  is null
Union All
SELECT  t.Destination, t.Pref & fkodtel(t.Expref,n.counter) as ff
FROM TelKod t, Номер n,
t inner join n on len(t.Expref) - len(replace(t.Expref,",",""))+ 1 >=n.counter
where  t.Expref  is not null) as q


О.... умный, да ? :)
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184336
Rustemmus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mds_worldЕсли есть дополнительная таблица с последовательными номерами от 1 до n, где n максимальное количество элементов в поле ExPref, то получить искомое можно таким запросом (таблица Номер - доп.таблица, в ней поле counter)
Полный запрос на выборку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT  t.Destination, t.Pref
FROM TelKod t
where  t.Expref  is null
Union All
SELECT  t.Destination, t.Pref & fkodtel(t.Expref,n.counter) as ff
FROM TelKod t, Номер n,
t inner join n on len(t.Expref) - len(replace(t.Expref,",",""))+ 1 >=n.counter
where  t.Expref  is not null
Ну, а дальше либо вставлять данные в новую таблицу, либо просто выборка автор написал не очень точно.


Если в новую таблицу, то
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Select * into НоваяТаблица
From
(SELECT  t.Destination, t.Pref
FROM TelKod t
where  t.Expref  is null
Union All
SELECT  t.Destination, t.Pref & fkodtel(t.Expref,n.counter) as ff
FROM TelKod t, Номер n,
t inner join n on len(t.Expref) - len(replace(t.Expref,",",""))+ 1 >=n.counter
where  t.Expref  is not null) as q


Дело в том что нет такой дополнительной таблицы.
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184372
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RustemmusДело в том что нет такой дополнительной таблицы.

Так какие проблемы в том, чтобы ее создать? И заполнить одно поле цифрами от 1 до 5, скажем? Нет таких проблем. Создайте в конструкторе таблиц числовое поле, назовите его counter, запомните таблицу по именем Номер. Запишите в поле counter последовательные цифры от 1 до 5.

И все!!!
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184381
Rustemmus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdfgsdfgsdfМожно и запрососм (при условии что цифри 998 711, 712, 713 хранятся в отдельных полях а не в одном и через запятую...)
Как раз занимаюсь разделением значений поля ExPref на раные поля. Максимальное количество значений в данном поле 146.
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184415
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustemmus sdfgsdfgsdfМожно и запрососм (при условии что цифри 998 711, 712, 713 хранятся в отдельных полях а не в одном и через запятую...)
Как раз занимаюсь разделением значений поля ExPref на раные поля. Максимальное количество значений в данном поле 146.А зачем вы это делаете? Попробуйте предложенный вариант. Уверяю вас, он рабочий.
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184425
Вопросник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что такое fkodtel ?
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184457
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопросника что такое fkodtel ?ЁКЛМН!!! Действительно, профункцию разделения забыл. Она простенькая, но нужна
Код: plaintext
1.
2.
Public Function fkodtel(pole, n)
    fkodtel = Split(pole, ",")(n -  1 )
End Function
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35184821
Rustemmus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в Access я пользуюсь только статистическими функциями. А функцию Fkodtel необходимо объявить. Подскажите, где это делается?
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35185712
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функцию надо поместить в стандартный модуль
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35192965
BoNiM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RustemmusДело в том что нет такой дополнительной таблицы.Она и не нужна, если воспользоваться соображениями, изложенными здесь . Создаете сохраненный запрос Digits
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT TOP  1   0  AS digit FROM TelKod
UNION All
SELECT TOP  1   1  FROM TelKod
UNION All 
SELECT TOP  1   2  FROM TelKod
UNION All
SELECT TOP  1   3  FROM TelKod
UNION All
SELECT TOP  1   4  FROM TelKod
UNION All
SELECT TOP  1   5  FROM TelKod
UNION All
SELECT TOP  1   6  FROM TelKod
UNION All
SELECT TOP  1   7  FROM TelKod
UNION All
SELECT TOP  1   8  FROM TelKod
UNION ALL 
SELECT TOP  1   9  FROM TelKod
и несколько модифицируете запрос, предложенный mds_world
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT  t.Destination, t.Pref
FROM TelKod t
WHERE  t.Expref  is null
UNION ALL 
SELECT  t.Destination, t.Pref & fkodtel(t.Expref,n.counter) as ff
FROM TelKod t, 
(SELECT TOP  150  (D2.digit & D1.digit & D0.digit)+ 0  AS counter
FROM Digits AS D0, Digits AS D1, Digits AS D2) As n,
t INNER JOIN n on Len(t.Expref) - Len(Replace(t.Expref,",",""))>=n.counter
WHERE  t.Expref  Is Not Null
и функцию
Код: plaintext
1.
2.
Public Function fkodtel(pole, n)
    fkodtel = Trim(Split(pole, ",")(n))
End Function
P.S. Здесь учтено, что RustemmusМаксимальное количество значений в данном поле 146.С запасом принято 150.
...
Рейтинг: 0 / 0
запросом разделить одну запись на несколько
    #35197537
Rustemmus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To BoNIM:
Все работает. Желаемый результат получен.
Огромное всем спасибо!
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запросом разделить одну запись на несколько
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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