1

我有一个表,其中包含如下数据

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
4

3 回答 3

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;
于 2013-07-19T16:12:46.157 回答
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在这里

分享和享受。

于 2013-07-19T21:39:49.603 回答
-1

在 Oracle 中,连接运算符是 ||。所以,这将是

选择姓名 || '|' || Reg_type1 || '|' || Reg_type2 .....来自表名......

于 2013-07-19T16:03:12.053 回答