我有一个表格,其数据如下
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
答案 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 .....