Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Результат SQL в одну строку  [new]
Rust()
Member

Откуда:
Сообщений: 168
Есть 2 связанные таблицы (по полю ID_VAR )
CREATE TABLE DB2ADMIN.ATTRIBUTES (
		ID BIGINT NOT NULL ,
		ID_VAR BIGINT NOT NULL,
                ID_PROCESS BIGINT NOT NULL,
		VALUE_VAR VARCHAR(1024))

CREATE TABLE DB2ADMIN.VARIABLES (
		ID_VAR BIGINT NOT NULL ,
		NAME_VAR VARCHAR(128)


со значениями
ATTRIBUTES
IDID_VARID_PROCESSVALUE_VAR
111'qqq'
221'www'
341'eee'
412'rrr'
522'ttt'
632'yyy'
742'yyy'


VARIABLES
ID_VAR NAME_VAR
1'синий'
2'красный'
3'голубой'
4'желтый'
5'зеленый'


Как выполнить запрос, чтобы результатом была, например такая таблица для ID_PROCESS=1
NAME_VAR1 VALUE_VAR1 NAME_VAR2 VALUE_VAR2
'синий''qqq''красный''www'
18 окт 13, 15:06    [14998713]     Ответить | Цитировать Сообщить модератору
 Re: Результат SQL в одну строку  [new]
Rust()
Member

Откуда:
Сообщений: 168
Придумал такое решение, но не уверен в его оптимальности:
with t as (
SELECT v.name_var as q1, a.value_var as q2, a.id_process as pr
FROM DB2ADMIN.variables v
join db2admin.attributes a on (a.id_var=v.id_var)
where v.name_var='синий' 
) 
select t.q1 as NAME_VAR1, t.q2 as VALUE_VAR1,v.name_var as NAME_VAR2, a.value_var as NAME_VAR2 from t,DB2ADMIN.variables v
join db2admin.attributes a on (a.id_var=v.id_var)
where v.name_var='красный' and a.id_process=1 and t.pr=1
18 окт 13, 15:58    [14999131]     Ответить | Цитировать Сообщить модератору
 Re: Результат SQL в одну строку  [new]
Rust()
Member

Откуда:
Сообщений: 168
Но остается вопрос ка, например, получить такой результат:
NAME_VAR1 VALUE_VAR1NAME_VAR2 VALUE_VAR2NAME_VAR3 VALUE_VAR3
'синий''qqq''красный''www''желтый''eee'
18 окт 13, 16:24    [14999302]     Ответить | Цитировать Сообщить модератору
 Re: Результат SQL в одну строку  [new]
Was ist das?
Guest
Rust(),

"Результат SQL в одну строку" - если только в столбец типа "строка" где все значения будут конкотенированны через разделитель.
Если в результирующий набор с заранее неизвестным количеством столбцов - то ХП с динамически формируемым ddl.

p.s. в какой реляционной субд такое (универсальный sql-statement с заранее неопределенным количеством столбцов в результирующем наборе) вообще возможно ?
18 окт 13, 17:14    [14999636]     Ответить | Цитировать Сообщить модератору
 Re: Результат SQL в одну строку  [new]
Rust()
Member

Откуда:
Сообщений: 168
Число столбцов известно - 3
21 окт 13, 08:28    [15006227]     Ответить | Цитировать Сообщить модератору
 Re: Результат SQL в одну строку  [new]
Rust()
Member

Откуда:
Сообщений: 168
Rust()
Число столбцов известно - 3

то есть 3 пары
21 окт 13, 08:30    [15006230]     Ответить | Цитировать Сообщить модератору
 Re: Результат SQL в одну строку  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4949
Rust(),

А для PROCESS_ID=2 что, пар должно быть 4?
21 окт 13, 13:12    [15007701]     Ответить | Цитировать Сообщить модератору
 Re: Результат SQL в одну строку  [new]
Rust()
Member

Откуда:
Сообщений: 168
Mark Barinstein,
нет, то же 3 )

Задачу уже решил вот так:
with t as (
SELECT v.name_var as name_var1, a.value_var as value_var1, a.id_process as pr
FROM DB2ADMIN.variables v
join db2admin.attributes a on (a.id_var=v.id_var)
where v.name_var='синий' 
) ,
 t1 as  (
SELECT t.*, v.name_var as name_var2, a.value_var as value_var2, a.id_process as pr
FROM DB2ADMIN.variables v
join db2admin.attributes a on (a.id_var=v.id_var)
where v.name_var='красный' 
)
 
select t1.*, v.name_var as NAME_VAR3, a.value_var as NAME_VAR3 from t1,DB2ADMIN.variables v
join db2admin.attributes a on (a.id_var=v.id_var)
where v.name_var='желтый' and a.id_process=1 and t.pr=1
21 окт 13, 14:15    [15008184]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить