powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / обращение к стобцу относительно его порядка в запросе
10 сообщений из 10, страница 1 из 1
обращение к стобцу относительно его порядка в запросе
    #36847161
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем доброго времени суток!

существует ли штатный механизм конвертирования последовательности полей в результатах запроса в последовательность значений одного поля ?
т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select f1,f2,f3 .... from my table
в 
insert into mytable2 (field_value)
values (значение f1);
insert into mytable2 (field_value)
values (значение f2);
и т.д.

это что-то из сферы кросс-таблиц

первое что пришло в голову
Код: plaintext
select f1 || ';' || f2 || ';' || f3 from my table
а потом работать со строкой выделяя подстроку

может есть что-то из штатный средств ?
...
Рейтинг: 0 / 0
обращение к стобцу относительно его порядка в запросе
    #36848034
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Штатных нет, можно легко свою хп общего вида написать, подавая ей на вход строку-текст запроса и имя поля таблицы, куда вставлять...
...
Рейтинг: 0 / 0
обращение к стобцу относительно его порядка в запросе
    #36848385
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, Марк

примерно так и сделал через хранимую процедуру
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    
select articul,name,COALESCE(period_1||';','0;')||COALESCE(period_2||';','0;')||COALESCE(period_3||';','0;')||COALESCE(period_4||';','0;')||COALESCE(period_5||';','0;')||
	   COALESCE(period_6||';','0;')||COALESCE(period_7||';','0;')||COALESCE(period_8||';','0;')||COALESCE(period_9||';','0;')||COALESCE(period_10||';','0;')||
	   COALESCE(period_11||';','0;')||COALESCE(period_12||';','0;')||COALESCE(period_13||';','0;')||COALESCE(period_14||';','0;')||COALESCE(period_15||';','0;')||
	   COALESCE(period_16||';','0;')||COALESCE(period_17||';','0;')||COALESCE(period_18||';','0;')||COALESCE(period_19||';','0;')||COALESCE(period_20||';','0')
           as period_values
     from cross_import
...
Рейтинг: 0 / 0
обращение к стобцу относительно его порядка в запросе
    #36848412
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рука дрогнула, не на ту кнопку нажал.... :)
хотел сказать, что сцепил все поля с учетом проверки на нул
потом по первой строчке заменил
Код: plaintext
replace(period_values,';0','');
чтобы отсечь пустые значения в наименованиях столбцов,
сформировал массив столбцов
по остальным строчкам ограничил разбор до количества в массиве столбцов
...
Рейтинг: 0 / 0
обращение к стобцу относительно его порядка в запросе
    #36848574
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jack_nsk,

мой вариант(если конечно я поняла задачу)-access 2003\07 union без all уберет повторы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT  'f2',t100913.[F2] FROM t100913
union
SELECT  'f3',t100913.[F3] FROM t100913
union
SELECT  'f4',t100913.[F4] FROM t100913
UNION 
SELECT  'f5',t100913.[F5] FROM t100913;
...
Рейтинг: 0 / 0
обращение к стобцу относительно его порядка в запросе
    #36848625
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хороший ответ, ПЕНСИОНЕРКА :)
...
Рейтинг: 0 / 0
обращение к стобцу относительно его порядка в запросе
    #36848815
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,

не совсем понял, как применить в пределах db2... :)
но попробовал, насколько я понял
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
------------------------------ Введенные команды ------------------------------
SELECT  'f2',cross_import.[period_2] FROM cross_import
union
SELECT  'f3',cross_import.[period_3] FROM cross_import
union
SELECT  'f4',cross_import.[period_4] FROM cross_import
UNION 
SELECT  'f5',cross_import.[period_5] FROM cross_import;
------------------------------------------------------------------------------
SQL0104N  Обнаружен неправильный элемент "[" 
после текста "'f2',cross_import.".  Список возможных 
правильных элементов: "<identifier>".  SQLSTATE= 42601 
увы, конструкция cross_import.[period_2] не предполагает доступ к столбцу результатов...
или чего-то недопонял... :)

ежели только так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT  'f2',cross_import.period_2, 1  FROM cross_import
union
SELECT  'f3',cross_import.period_3, 2  FROM cross_import
union
SELECT  'f4',cross_import.period_4, 3  FROM cross_import
UNION 
SELECT  'f5',cross_import.period_5, 4  FROM cross_import
order by  3 ;
то выдает :)

правда в моем случае таблицу cross_import как источник,
нужно заменить на запись или как на таблицу с 1-ой записью
...
Рейтинг: 0 / 0
обращение к стобцу относительно его порядка в запросе
    #36848831
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в таком случае наверное нужно использовать курсор,
для выемки по-записям для последующего разбора
или воспользоваться новшеством SELECT * FROM users LIMIT 5 OFFSET 10
Выражение OFFSET указывает, сколько строк пропустить, начиная с первой строки, прежде чем начать выдавать результат.
Например, если нужно получить строки таблицы USERS с 11 по 15, можно использовать следующий оператор:
...
Рейтинг: 0 / 0
обращение к стобцу относительно его порядка в запросе
    #36849402
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jack_nskпримерно так и сделал через хранимую процедуру...Нет, я имел ввиду вот что.
Если я правильно понял задачу, то:
У вас есть произвольный селект:
Код: plaintext
select f1, ..., fN from ...
и из каждой записи его надо получить N (по числу полей) инсертов в другую таблицу.
Тогда можно сделать примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
insert into mytable2 (field_value)
with t(i) as (
values  1 
  union all
select i+ 1  
from t
where i<N)
select 
case t.i
  when  1  then a.f1
  ...
  when N then a.fN
end
from (select f1, ..., fN from ...) a, t
...
Рейтинг: 0 / 0
обращение к стобцу относительно его порядка в запросе
    #36850686
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, Марк!
изящно!
Mark Barinsteinjack_nskпримерно так и сделал через хранимую процедуру...Нет, я имел ввиду вот что.
Если я правильно понял задачу, то:
У вас есть произвольный селект:
Код: plaintext
select f1, ..., fN from ...
и из каждой записи его надо получить N (по числу полей) инсертов в другую таблицу.
Тогда можно сделать примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
insert into mytable2 (field_value)
with t(i) as (
values  1 
  union all
select i+ 1  
from t
where i<N)
select 
case t.i
  when  1  then a.f1
  ...
  when N then a.fN
end
from (select f1, ..., fN from ...) a, t


немного модифицировал, чтобы отсечь пустые
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with t(i) as (
values  1 
  union all
select i+ 1  
from t
where i<N)

select source_data from (

select 
case t.i
  when  1  then a.f1
  ...
  when N then a.fN
end 

as source_data

from (select f1, ..., fN from ...) a, t 

) where source_data is not null

СПАСИБО!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / обращение к стобцу относительно его порядка в запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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