Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Склейка строк значений


Автор: 2222211111 24.4.2013, 19:43
Всем привет. Есть таблицы. (для TSQL)

Код

declare @t1 table (id int, Value  varchar(50));  
declare @t2 table (id int, Value  varchar(50));  
declare @t3 table (id int, Value  varchar(50));  
declare @t4 table (id int, Value  varchar(50));  

insert @t1 (id, Value)
select 1,'Значение1' union
select 2,'Значение2' 

insert @t2 (id, Value)
select 1,'Значение11' union
select 3,'Значение33'

insert @t3 (id, Value)
select 1,'Значение111' union

select 2,'Значение222' 

insert @t4 (id, Value)
select 2,'Значение2222' union
select 3,'Значение3333'
 


Подскажите пожайлуйста как можно получить такой результат. Нужна склейка строк по Id. Таблиц может быть больше чем четыре. Значения могут быть во всех таблицах,  могут отсутствовать вовсе. 

Id Value
1 'Значение1' + ' ' + 'Значение11' + ' ' + 'Значение111'
2 'Значение2' + ' ' + 'Значение222' + ' ' + 'Значение2222'
3 'Значение33' + ' ' + 'Значение3333' 

В лоб решил написать запрос с union где перечисляю комбинаторно все варианты, когда в каком то поле нет значений. Можно ли это проще как-то написать? 

Автор: Akina 24.4.2013, 20:14
Код

select q.id, concat_ws(' ',t1.value,t2.value,t3.value,t4.value)
from 
(
select id from t1
union
select id from t2
union
select id from t3
union
select id from t4
) q
left join t1 on q.id=t1.id
left join t2 on q.id=t2.id
left join t3 on q.id=t3.id
left join t4 on q.id=t4.id

Автор: 2222211111 24.4.2013, 20:38
Большое спасибо. Все получилость. Только заменил CONCAT_WS на CONCAT тк у меня TSQL

Добавлено через 29 секунд
Ok

Автор: Akina 24.4.2013, 22:27
Цитата(2222211111 @  24.4.2013,  21:38 Найти цитируемый пост)
Только заменил CONCAT_WS на CONCAT тк у меня TSQL

А как CONCAT там относится к null среди аргументов? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)