行转列的语句要怎么写,请帮忙

bota 2011-10-21 03:05:19
我有一个表role和和一个role_user,还一个user表
role表中有
role_id role_name
1 增加
2 修改
3 删除
表role_user中有
role_id user_id
1 001
2 001
1 002
1 003
2 003
3 003

user表中
user_id user_name
001 张三
002 李四
003 王五


现在要的结果是这样的:
增加 修改 删除
张三 张三 王五
李四 王五
王五
...全文
269 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinan9 2011-10-25
  • 打赏
  • 举报
回复
推荐下吧,很经典的帖子
http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html?93286
xiaobn_cn 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 s_sj_gz_125 的回复:]
行转列,主要用到case...when 语句
[/Quote]

他那有200多个列,case when会写到手软。
xiaoyu871225 2011-10-25
  • 打赏
  • 举报
回复
经典中的经典
http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html?13274
guostong 2011-10-25
  • 打赏
  • 举报
回复
查查 pivot 怎么用
s_sj_gz_125 2011-10-24
  • 打赏
  • 举报
回复
行转列,主要用到case...when 语句
xiaobn_cn 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bota 的回复:]
权限不止“增加”、“修改”、“删除”3个啊,有近200个,就是要生产200个列出来的
[/Quote]

去找个支持交叉报表的客户端去做个交叉报表就行了,不要把所有的工作都交给SQL,你这个需求不适合用SQL来做。
bota 2011-10-24
  • 打赏
  • 举报
回复
权限不止“增加”、“修改”、“删除”3个啊,有近200个,就是要生产200个列出来的
zsplx1111 2011-10-21
  • 打赏
  • 举报
回复
我想到的有两种方法:(不对的勿喷)
法一:
1、先用批量函数查询出你要的这句话 case when role_name = '增加' then user_name end) "增加",

select 'max(case when role_name = '||chr(39)||状态名||chr(39)||' then user_name end) "状态名",'
from (select 状态名 from 你要搜索的状态表);

2、再在编辑器中粘贴上写全就好了

法二:
实用游标cursor对状态表扫描,用&状态列接收即可
bota 2011-10-21
  • 打赏
  • 举报
回复
有没有哪位大虾帮忙啊,急啊
bota 2011-10-21
  • 打赏
  • 举报
回复
哪位大虾帮忙写个,搞不出来啊
bota 2011-10-21
  • 打赏
  • 举报
回复
需要怎么写,没写过函数,汗
cosio 2011-10-21
  • 打赏
  • 举报
回复
那就是写成函数!
cosio 2011-10-21
  • 打赏
  • 举报
回复
select  
max(case when c.role_id=1 then a.user_name end) 增加,
max(case when c.role_id=2 then a.user_name end) 删除,
max(case when c.role_id=3 then a.user_name end) 修改
from
[user] a,role_use b,role c
where a.user_id=b.user_id and b.role_id=c.role_id
bota 2011-10-21
  • 打赏
  • 举报
回复
我这个是示例,实际的权限表有100多个权限,写死不行啊
opps_zhou 2011-10-21
  • 打赏
  • 举报
回复

select case when role_name = '增加' then user_name end as "增加",
case when role_name = '修改' then user_name end as "修改",
case when role_name = '删除' then user_name end as "删除"
from (select user_name, role_name
from role_tab a, role_user b, user_tab c
where a.role_id = b.role_id
and c.user_id = b.user_id);


17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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