2016-07-25 3 views
0

У меня есть запрос, как -Удалите два строки в одну строку в накидной запросе

select id,fieldName as value1,'' as value2 from tableName 
union 
select id,'' as value1,fieldName as value2 from tableName 

это даст выход like--

id value1 value2 
1   name 
1 name 
2 abc  
2   abcx 

но при попытке отобразить его как-

id value1 value2 
1 name  name 
2 abc  abcx 

в PostgreSQL.

Может ли кто-нибудь предложить мне, как это сделать. - невинно работа в этой ситуации.

ответ

2

Использование string_agg():

select string_agg(value1, '') value1, string_agg(value2, '') value2 
from (
    select 'name' as value1, '' as value2 
    union 
    select '' as value1, 'name' as value2 
    ) s; 

value1 | value2 
--------+-------- 
name | name 
(1 row)  

агрегатные функции, такие как string_agg() обычно выполняются для групп строк. Используйте group by id:

with a_table(id, col1, col2) as (
    values 
     (1, 'name', 'name'), 
     (2, 'abc', 'abcx') 
    ) 
select id, string_agg(value1, '') value1, string_agg(value2, '') value2 
from (
    select id, col1 as value1,'' as value2 from a_table 
    union 
    select id, '' as value1, col2 as value2 from a_table 
    ) s 
group by id 
order by id; 

id | value1 | value2 
----+--------+-------- 
    1 | name | name 
    2 | abc | abcx 
(2 rows)  
+0

если имя поля выбора из базы данных (таблицы) она возвращает несколько имен, в этом случае все названия являются прибудете конкатенация с разделителем и дисплеем в одном row.but пытающегося дисплее каждое имя в строке отличаются. – Basavaraj

+0

См. Отредактированный ответ. – klin

+0

thank you.it работает – Basavaraj

Смежные вопросы