如何将表某列数据做为视图的表头

hanbb1982 2008-04-28 12:04:22
在oracle中如何将表某列数据做为视图的表头?
比如说,我在A表中有
ID,NAME
1 A
2 B
3 C
4 D

表A中的数据数未知。
我想建个视图,想把变成以下格式:
A B C D ...

请问如何建?
...全文
168 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
stockstone 2008-04-30
  • 打赏
  • 举报
回复
可能我刚才讲得有些不太明白

select v.o,
decode(v.name ,'A' ,v.id,'A') A,
decode(v.name ,'B' ,v.id,'B') B,
decode(v.name ,'C' ,v.id ,'C') C,
decode(v.name ,'D' ,v.id ,'D') D
from(
select t.o,t.name ,t.id
from tablename t
where t.name in ('A','B','C','D')
group by t.o,t.name ,t.id
) v

这里有三个字段:o,name,id,直接分组查询就行了.其实也挺简单的
stockstone 2008-04-30
  • 打赏
  • 举报
回复
有事可以加我的,我每天都会上来逛一会的
stockstone 2008-04-30
  • 打赏
  • 举报
回复
我曾经写过这样的sql,应该是用decode实现吧,你要的程序可能是这样子的吧,

select max(v.A),max(v.B),max(v.C),max(v.D) from
(select decode(s.name,'A',s.id,'0') A ,
decode(s.name,'B',s.id '0') B ,
decode(s.name,'C',s.id '0') C ,
decode(s.name,'D',s.id '0') D
from tablename s ) v
group by v.A,v.B,v.C,v.D

hanbb1982 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wxmwxmwxm 的回复:]
select max(t1),max(t2),max(t3),max(t4) from
(select NAME t1,'' t2,'' t3,'' t4 from 表A where ID=1
union all
select '',NAME,'','' from 表A where ID=2
union all
select '','',NAME,'' from 表A where ID=3
union all
select '','','',NAME from 表A where ID=4)
[/Quote]
兄弟,这个写法我知道,但有一点的是,我的表中数据的个数是比较多的,而且也是未知的,不可能用你这样写的。
niujunkai 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wxmwxmwxm 的回复:]
select max(t1),max(t2),max(t3),max(t4) from
(select NAME t1,'' t2,'' t3,'' t4 from 表A where ID=1
union all
select '',NAME,'','' from 表A where ID=2
union all
select '','',NAME,'' from 表A where ID=3
union all
select '','','',NAME from 表A where ID=4)
[/Quote]
我表A有 n条记录 怎么写呢?
wxmwxmwxm 2008-04-28
  • 打赏
  • 举报
回复
select max(t1),max(t2),max(t3),max(t4) from
(select NAME t1,'' t2,'' t3,'' t4 from 表A where ID=1
union all
select '',NAME,'','' from 表A where ID=2
union all
select '','',NAME,'' from 表A where ID=3
union all
select '','','',NAME from 表A where ID=4)
hanbb1982 2008-04-28
  • 打赏
  • 举报
回复
那需要怎么实现?
许毕峰 2008-04-28
  • 打赏
  • 举报
回复
应该只能在存储过程的动态sql语句里面来实现
hanbb1982 2008-04-28
  • 打赏
  • 举报
回复
不明白我的意思?
我的意思是:
ID,NAME
1 A
2 B
3 C
4 D

view: A B C D
数据区
niujunkai 2008-04-28
  • 打赏
  • 举报
回复
晕 表头啊~不知道咯
niujunkai 2008-04-28
  • 打赏
  • 举报
回复
SELECT *
FROM(
SELECT substr(SYS_CONNECT_BY_PATH(t.name,' '),2)
FROM A t
START WITH t.ID = 1
CONNECT BY PRIOR t.ID = t.ID - 1
ORDER BY LEVEL DESC)
WHERE ROWNUM = 1

17,086

社区成员

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

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