多行转多列

dodolzc10 2016-10-31 03:09:28


如图显示,每个险种都分个人缴费,公司缴费。

以个人、险种为中心转为 ———— 姓名,险种1公司缴费, 险种1个人缴费, 险种2公司缴费, 险种2个人缴费
...全文
102 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dodolzc10 2016-11-03
  • 打赏
  • 举报
回复
引用 2 楼 js14982 的回复:
看的有点晕,你是要动态行转列?
能提供下动态的思路吗
dodolzc10 2016-10-31
  • 打赏
  • 举报
回复
引用 6 楼 js14982 的回复:
[quote=引用 5 楼 dodolzc10 的回复:] [quote=引用 4 楼 js14982 的回复:] 很简单啊
select name,mon,
max(case when 险种='养老保险' then 险种 end)  险种1,
max(case when 险种='养老保险' then 公司缴费 end)  险种1公司缴费,
max(case when 险种='养老保险' then 个人缴费 end)  险种1个人缴费,
max(case when 险种='工伤保险' then 险种 end)  险种2,
max(case when 险种='工伤保险' then 公司缴费 end)  险种2公司缴费,
max(case when 险种='工伤保险' then 个人缴费 end)  险种2个人缴费,
...
from tab
group by  name,mon;
刚想到用 CASE WHEN ,您用到的GROUP BY 是为了统计各险种的公司+个人的对吧?[/quote]group by是为了配合max,将多行转成一行,你可以试一下不用group和max,它在当前险种有值,其他行是空值,但是是多行。用max+group by来转成一行[/quote] 好的,出结果了,谢谢了!自己想多了
js14982 2016-10-31
  • 打赏
  • 举报
回复
引用 5 楼 dodolzc10 的回复:
[quote=引用 4 楼 js14982 的回复:] 很简单啊
select name,mon,
max(case when 险种='养老保险' then 险种 end)  险种1,
max(case when 险种='养老保险' then 公司缴费 end)  险种1公司缴费,
max(case when 险种='养老保险' then 个人缴费 end)  险种1个人缴费,
max(case when 险种='工伤保险' then 险种 end)  险种2,
max(case when 险种='工伤保险' then 公司缴费 end)  险种2公司缴费,
max(case when 险种='工伤保险' then 个人缴费 end)  险种2个人缴费,
...
from tab
group by  name,mon;
刚想到用 CASE WHEN ,您用到的GROUP BY 是为了统计各险种的公司+个人的对吧?[/quote]group by是为了配合max,将多行转成一行,你可以试一下不用group和max,它在当前险种有值,其他行是空值,但是是多行。用max+group by来转成一行
dodolzc10 2016-10-31
  • 打赏
  • 举报
回复
引用 4 楼 js14982 的回复:
很简单啊
select name,mon,
max(case when 险种='养老保险' then 险种 end)  险种1,
max(case when 险种='养老保险' then 公司缴费 end)  险种1公司缴费,
max(case when 险种='养老保险' then 个人缴费 end)  险种1个人缴费,
max(case when 险种='工伤保险' then 险种 end)  险种2,
max(case when 险种='工伤保险' then 公司缴费 end)  险种2公司缴费,
max(case when 险种='工伤保险' then 个人缴费 end)  险种2个人缴费,
...
from tab
group by  name,mon;
刚想到用 CASE WHEN ,您用到的GROUP BY 是为了统计各险种的公司+个人的对吧?
js14982 2016-10-31
  • 打赏
  • 举报
回复
很简单啊
select name,mon,
max(case when 险种='养老保险' then 险种 end)  险种1,
max(case when 险种='养老保险' then 公司缴费 end)  险种1公司缴费,
max(case when 险种='养老保险' then 个人缴费 end)  险种1个人缴费,
max(case when 险种='工伤保险' then 险种 end)  险种2,
max(case when 险种='工伤保险' then 公司缴费 end)  险种2公司缴费,
max(case when 险种='工伤保险' then 个人缴费 end)  险种2个人缴费,
...
from tab
group by  name,mon;
dodolzc10 2016-10-31
  • 打赏
  • 举报
回复
引用 2 楼 js14982 的回复:
看的有点晕,你是要动态行转列?
不用动态,因为险种不多
js14982 2016-10-31
  • 打赏
  • 举报
回复
看的有点晕,你是要动态行转列?
dodolzc10 2016-10-31
  • 打赏
  • 举报
回复
应该是多列转一行

17,377

社区成员

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

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