2013-07-19 3 views
1

У меня есть таблица, которая имеет данные, как в следующемОбъединение нескольких данных столбцов для одной строки в SQL

Name |Reg_Type 

aaa reg_type1 

aaa reg_type2 

bbb reg_type3 

aaa reg_type5 

bbb reg_type4 

bbb reg_type1 

Однако, я хочу SQL для возвращения результирующего набора, как: -

Name| Reg_type1| Reg_type2 |Reg_type3 |Reg_type4 |Reg_type5 |Reg_type6 

aaa  Y   Y   N   N   Y   N 
bbb  Y   N   Y   Y   N   N 
+1

Вам нужны отдельные столбцы или вы хотите, чтобы значения были объединены? – Taryn

ответ

-1

В Oracle оператор конкатенации равен ||. Таким образом, это было бы

Выбрать имя || '|' || Reg_type1 || '|' || Reg_type2 ..... from tablename .....

+0

нет Reg_type столбец – FUD

2

Функция listagg - это то, что вам нужно. Вы можете узнать об этом здесь:

http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php

SELECT name, LISTAGG(REG_TYPE,'|') WITHIN GROUP (ORDER BY reg_type) AS REG 
FROM REG 
GROUP BY NAME; 
+0

эй каждый хочу отдельный колонка. Reg_type1, Reg_type2, Reg_type3 .... - все отдельные столбцы. – Nishant

1

Попробуйте запрос поворота:

select * from mytable 
    pivot (count(reg_type) 
      for reg_type in ('reg_type1', 
          'reg_type2', 
          'reg_type3', 
          'reg_type4', 
          'reg_type5')); 

, который дает результаты:

NAME 'REG_TYPE1' 'REG_TYPE2' 'REG_TYPE3' 'REG_TYPE4' 'REG_TYPE5' 
aaa  2   1   0   0   1 
bbb  0   0   1   1   0 

SQLFiddle here.

Делитесь и наслаждайтесь.