表A中存储数据为:id name age sex
1 李四 20 女
1 王五 30 男
1 张三 40 女
求一这样显示数据的sql语句:id name-age sex
1 李四-20/王五-30/张三-40 女/男/女 select (name||’-‘||age ) name-age ,sex from A 这条只是得到横着的拼接,还需要求上下拼接的!谢谢!
1 李四 20 女
1 王五 30 男
1 张三 40 女
求一这样显示数据的sql语句:id name-age sex
1 李四-20/王五-30/张三-40 女/男/女 select (name||’-‘||age ) name-age ,sex from A 这条只是得到横着的拼接,还需要求上下拼接的!谢谢!
With a As(
select 1 id,'李四' Name, 20 age, '女' sex From dual Union All
Select 1, '王五', 30, '男' From dual Union All
Select 1, '张三', 40, '女' From dual
)
Select Id,
Replace(Wm_Concat(Name || '-' || Age), ',', '/'),
Replace(Wm_Concat(Sex), ',', '/')
From a
Group By Id
这个方法挺新颖的,但是弹出:此查询块中要求CONNECT BY子句
2 max(substr(SYS_CONNECT_BY_PATH("name-age",'/'),2)) "name-age",
3 max(substr(SYS_CONNECT_BY_PATH(sex,'/'),2)) sex
4 from
5 (
6 select id,name||'-'||age "name-age",sex,row_number() over(partition by id order by id) rn from t1
7 )
8 connect by prior rn = rn-1
9 group by id
这有一个差不多对,但是如果ID为1的有很多很多个,它就会截断一部分