将多列数据合并到SQL中的单个行

时间:2013-07-19 15:59:43

标签: sql oracle

我有一个表格,其数据如下

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

分享并享受。

答案 2 :(得分:-1)

在Oracle中,连接运算符是||。所以,它会是

选择名称|| '|' || Reg_type1 || '|' || Reg_type2 .....来自tablename .....