Oracle 自动创建字段问题,100求高人解答

qianguang 2008-11-02 11:24:55
各位:我现在要实现这样一个功能,我查询出一组数据,根据查询结果来创建临时表。如:如果我查询结果是有7列数据,我就创建7个字段(colum1,colum2,colum3,colum4,colum5,,colum6,colum7),也就是根据查询结果的列数量来循环创建字段的数量。然后再向这个表插入已经查询出的结果数据.请问如何实现?
...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianguang 2008-11-03
  • 打赏
  • 举报
回复
感谢BlueskyWide、linzhangs。结贴!
范佩西_11 2008-11-03
  • 打赏
  • 举报
回复
直接
create table temptable as select colum1,colum2,colum3,colum4,colum5,colum6,colum7 from tablename
sleepzzzzz 2008-11-02
  • 打赏
  • 举报
回复
一条SQL就搞定了:
create table tableB as (select colum1,colum2...colum7 from tableA where 1=1);



[Quote=引用楼主 qianguang 的帖子:]
各位:我现在要实现这样一个功能,我查询出一组数据,根据查询结果来创建临时表。如:如果我查询结果是有7列数据,我就创建7个字段(colum1,colum2,colum3,colum4,colum5,,colum6,colum7),也就是根据查询结果的列数量来循环创建字段的数量。然后再向这个表插入已经查询出的结果数据.请问如何实现?
[/Quote]
BlueskyWide 2008-11-02
  • 打赏
  • 举报
回复
--可以把tableB当作临时表,create创建,drop删除;可以根据需要修改 where ... and other_condition  :

--只导瓜皮不导瓜瓤(只导表结构不导数据)的语句:

create table tableB as (select * from tableA where 1=0);


--既导瓜皮又导瓜瓤的语句:

create table tableB as (select * from tableA where 1=1);



[Quote=引用楼主 qianguang 的帖子:]
各位:我现在要实现这样一个功能,我查询出一组数据,根据查询结果来创建临时表。如:如果我查询结果是有7列数据,我就创建7个字段(colum1,colum2,colum3,colum4,colum5,,colum6,colum7),也就是根据查询结果的列数量来循环创建字段的数量。然后再向这个表插入已经查询出的结果数据.请问如何实现?
[/Quote]
icss_zhen 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 qianguang 的帖子:]
各位:我现在要实现这样一个功能,我查询出一组数据,根据查询结果来创建临时表。如:如果我查询结果是有7列数据,我就创建7个字段(colum1,colum2,colum3,colum4,colum5,,colum6,colum7),也就是根据查询结果的列数量来循环创建字段的数量。然后再向这个表插入已经查询出的结果数据.请问如何实现?
[/Quote]
create table tableB as select colum1,colum2,colum3,colum4,colum5,,colum6,colum7 from tableA(后面可带过滤条件)
qianguang 2008-11-02
  • 打赏
  • 举报
回复
上面的语句如何在Oracle中转换?我始终转换出错,可否告知?
qianguang 2008-11-02
  • 打赏
  • 举报
回复
--> Test Data: [T]
if object_id('[T]') is not null drop table [T]
create table [T] (ID int identity(1,1),[GJSJ] int,[JKYL] numeric(2,1))
insert into [T]
select 0,5.0 union all
select 4,5.2 union all
select 12,4.8 union all
select 20,4.6 union all
select 28,4.5

select * from [T]
--Code
declare @s varchar(8000),@s2 varchar(8000)
select @s=ISNULL(@S+',','')+'max(case when [GJSJ]='''+ltrim([GJSJ])+''' then [GJSJ] end) as ''colum'+ltrim([id]+1)+'''',
@s2=ISNULL(@S2+',','')+''+ltrim([JKYL])+'' from T
--print @S
--print @s2
exec('select ''GJSJ'' as colum1,'+@S+' from [T] union all select ''JKYL'','+@s2+'')
--Drop
drop table [T]
--Result
/*
colum1 colum2 colum3 colum4 colum5 colum6
------ --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
GJSJ 0.0 4.0 12.0 20.0 28.0
JKYL 5.0 5.2 4.8 4.6 4.5
*/
Andy__Huang 2008-11-02
  • 打赏
  • 举报
回复
楼主想要的结果,其实我觉得创建视图就达到你想要的结果了
如果是要两次查询结果,可以要union 或union all 语句把两次查询结果合为一个结果集为新表

17,377

社区成员

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

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