sql 查询某行的值,返回不为空的列名

zhouyulin123 2016-04-03 03:37:10
表格为
id a b c d e
1 1 1
2 1 1 1
3 1
4 1
5 1 1
空白为null,不只有a,b,c,d,e这5列,现实情况中会有大约5000个列,每行值都为1或null
首先想给列排序,按照某列值的sum从高到底排序,比如这里sum(a)=3,sum(b)=1,那么列a放在列b前
其次给行排序,方法同上,按照某行sum值从高到低,这里sum(id=1)=2,sum(id=2)=3,那么id=2行放在id=1行前面
最后想查找对应行值不为空的所有列名,比如id=2时返回('a','c','d')
...全文
434 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengccy 2016-04-05
  • 打赏
  • 举报
回复

with t as
(select 1 as  id, 1 as a, null  as b ,null as c,  null as d , 1 as e from dual union all 
select 2,null,null,1,1,1  from dual union all 
select 3,1,null,null,null,null  from dual union all 
select 4,1,null,null,null,null from dual union all 
select 5,null,1,null,null,null from dual) 
select id,listagg(col,',')within group (order by col) as col from 
(select id,col,value from t unpivot (value for col in (a,c,b,d,e)))
where value is not null 
group by id
1.列转行; 2.排除空值; 3.行转字符串; 5000个字段,还是写plsql吧;
zhouyulin123 2016-04-04
  • 打赏
  • 举报
回复
不需要排序了 结果就要这个表 id 1 a e 2 c d e 3 a 4 a 5 b
ssqtjffcu 2016-04-03
  • 打赏
  • 举报
回复
把你想要的结果列出来先
zhouyulin123 2016-04-03
  • 打赏
  • 举报
回复
id a b c d e 1 1 null null null 1 2 null null 1 1 1 3 1 null null null null 4 1 null null null null 5 null 1 null null null 上面表格格式不对,以这个为准

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧