注册 登录
编程论坛 SQL Server论坛

一个很夸张的问题。。。

风之谢客 发布于 2009-11-23 15:33, 785 次点击
一张表中有四列,如何把后两列拼接到前两列下面。。。(注例:学好、姓名、学好、姓名——为四列的属性名)
请高手帮忙解答下。。。
6 回复
#2
uubird2009-11-23 20:35
什么意思
#3
风之谢客2009-11-23 21:01
回复 2楼 uubird
例如:下面一表有四列
学号     姓名     学号    姓名
100      张三     1005    张二
101      李四     1006    李三
103      王五     1007    王四
104      赵六     1008    赵五



如何通过sql语句修改成:
学号     姓名
100      张三         
101      李四     
103      王五     
104      赵六     
105      张二
106      李三
107      王四
108      赵五


麻烦帮忙思考下。。谢谢

#4
happynight2009-11-24 11:42

SELECT 学号1,姓名1 FROM 表
UNION
SELECT 学号2,姓名2 FROM 表

#5
风之谢客2009-11-24 13:43
回复 4楼 happynight
可是如何把他们合成一张表再导回原表呢,当然原表性质由四列变俩列了
#6
uubird2009-11-24 19:36
方法1:
select 学号1,姓名1 into table_2 from
(SELECT 学号1,姓名1 FROM 表
UNION
SELECT 学号2,姓名2 FROM 表
)as temp

另外做了个表table_2来存结果
方法二:游标 (他们合成一张表再导回原表,原表性质由四列变俩列)

    select 学号1,姓名1 into table_2 from
    (select 学号1,姓名1 from 表
    union
    select 学号2,姓名2 from 表 ) as temp
go
    delete from 表
go
    alter table 表  
    DROP COLUMN 学号2,姓名2
go
    declare t_cur cursor
    for
       select 学号1,姓名1 from table_2
    open t_cur
    declare @aa varchar(10),@bb varchar(10)
    fetch next from t_cur into @aa,@bb
    while @@fetch_status=0
       begin
          insert into 表 (学号1,姓名1) values(@aa,@bb)
          fetch next from t_cur into @aa,@bb
       end
    close t_cur
    deallocate t_cur
    go
    drop table table_2

方法三:上面的有点繁琐,后来再想了会,还是这个最简单了

select 学号1,姓名1 into table_2 from
(select 学号1,姓名1 from 表
union
select 学号2,姓名2 from 表 ) as temp
go
drop table 表
go
select * into 表 from table_2
go
drop table table_2

#7
风之谢客2009-11-25 22:07
回复 6楼 uubird
厉害,非常谢谢。。
1