Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запросом разделить одну запись на несколько / 18 сообщений из 18, страница 1 из 1
12.03.2008, 08:36
    #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
12.03.2008, 08:56
    #35184106
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
Наверное проще, надежнее и гибче будет пробежаться циклом по рекордсету.
...
Рейтинг: 0 / 0
12.03.2008, 09:25
    #35184148
sdfgsdfgsdf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
Можно и запрососм (при условии что цифри 998 711, 712, 713 хранятся в отдельных полях а не в одном и через запятую...)
...
Рейтинг: 0 / 0
12.03.2008, 09:38
    #35184168
_restavraciya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
> а не в одном и через запятую
Очень может быть что Ежик или Боним или кто-то еще смогут и это обойти
Задача в размножении записей
На сколько из размножить = ubound(split((ExPref,',')))-lbound(split(ExPref,','))
...
Рейтинг: 0 / 0
12.03.2008, 09:41
    #35184179
sdfgsdfgsdf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
ДЫк... оно то понятно.... но КАК ? В столбцах ?? или в столбце через запатую ???, насяльника ? как ?
...
Рейтинг: 0 / 0
12.03.2008, 09:45
    #35184185
_restavraciya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
Дык если бы я знал , то сам бы написал пример
...
Рейтинг: 0 / 0
12.03.2008, 09:55
    #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
12.03.2008, 09:58
    #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
12.03.2008, 10:41
    #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
12.03.2008, 10:58
    #35184372
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
RustemmusДело в том что нет такой дополнительной таблицы.

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

И все!!!
...
Рейтинг: 0 / 0
12.03.2008, 11:01
    #35184381
Rustemmus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
sdfgsdfgsdfМожно и запрососм (при условии что цифри 998 711, 712, 713 хранятся в отдельных полях а не в одном и через запятую...)
Как раз занимаюсь разделением значений поля ExPref на раные поля. Максимальное количество значений в данном поле 146.
...
Рейтинг: 0 / 0
12.03.2008, 11:11
    #35184415
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
Rustemmus sdfgsdfgsdfМожно и запрососм (при условии что цифри 998 711, 712, 713 хранятся в отдельных полях а не в одном и через запятую...)
Как раз занимаюсь разделением значений поля ExPref на раные поля. Максимальное количество значений в данном поле 146.А зачем вы это делаете? Попробуйте предложенный вариант. Уверяю вас, он рабочий.
...
Рейтинг: 0 / 0
12.03.2008, 11:13
    #35184425
Вопросник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
а что такое fkodtel ?
...
Рейтинг: 0 / 0
12.03.2008, 11:25
    #35184457
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
вопросника что такое fkodtel ?ЁКЛМН!!! Действительно, профункцию разделения забыл. Она простенькая, но нужна
Код: plaintext
1.
2.
Public Function fkodtel(pole, n)
    fkodtel = Split(pole, ",")(n -  1 )
End Function
...
Рейтинг: 0 / 0
12.03.2008, 13:04
    #35184821
Rustemmus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
в Access я пользуюсь только статистическими функциями. А функцию Fkodtel необходимо объявить. Подскажите, где это делается?
...
Рейтинг: 0 / 0
12.03.2008, 16:36
    #35185712
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
Функцию надо поместить в стандартный модуль
...
Рейтинг: 0 / 0
15.03.2008, 18:13
    #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
18.03.2008, 12:45
    #35197537
Rustemmus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запросом разделить одну запись на несколько
To BoNIM:
Все работает. Желаемый результат получен.
Огромное всем спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запросом разделить одну запись на несколько / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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