日期:2014-05-18  浏览次数:20608 次

急,求如何创建这样一个视图,谢谢
表1(Name,Number)
Name         Number
A                 2
B                 3
C                 4

如何创建一个视图View1(A,B,C)

A       B       C
2       3       4

将表的行变成视图的列,谢谢

------解决方案--------------------
将表数据旋转90度

将下表数据:
A b c d e
-------------------- ----------- ----------- ----------- -----------
x 1 2 3 4
y 5 6 7 8
z 9 10 11 12

转化成如下结果:
a x y z
-------------------- ---------- ---------- ----------
b 1 5 9
c 2 6 10
d 3 7 11
e 4 8 12

--生成测试数据
create table test1(A varchar(20),b int,c int,d int,e int)
insert into test1 select 'x ',1,2 ,3 ,4
insert into test1 select 'y ',5,6 ,7 ,8
insert into test1 select 'z ',9,10,11,12


--生成中间数据表
declare @s varchar(8000)
set @s= 'create table test2(a varchar(20) '
select @s=@s+ ', '+A+ ' varchar(10) ' from test1
set @s=@s+ ') '
exec(@s)

--借助中间表实现行列转换
declare @name varchar(20)

declare t_cursor cursor for
select name from syscolumns
where id=object_id( 'test1 ') and colid> 1 order by colid

open t_cursor

fetch next from t_cursor into @name

while @@fetch_status=0
begin
exec( 'select '+@name+ ' as t into test3 from test1 ')
set @s= 'insert into test2 select ' ' '+@name+ ' ' ' '
select @s=@s+ ', ' ' '+rtrim(t)+ ' ' ' ' from test3
exec(@s)
exec( 'drop table test3 ')
fetch next from t_cursor into @name
end
close t_cursor
deallocate t_cursor


--查看行列互换处理结果
select * from test1
select * from test2

--删除表
drop table test1
drop table test2
------解决方案--------------------
表1(Name,Number)
Name Number
A 2
B 3
C 4

如何创建一个视图View1(A,B,C)

A B C
2 3 4

----------
行列轉換

select case when name= 'A ' THEN number else 0 end as 'A ',
CASE WHEN NAME= 'B ' THEN NUMBER ELSE 0 END AS 'B ',
CASE WHEN NAME= 'C ' THEN NUMBER ELSE 0 END AS 'C '
FROM T
------解决方案--------------------
--这个调用存储过程完成.
数据库中有张表格如下

工资 福利 奖金
1月 100 200 300
2月 110 210 310
3月 120 220 320
4月 130 230 330

我想得到的结果是

1月 2月 3月 4月
工资 100 110 120 130
福利 200 210 220 230
奖金 300 310 320 330

就是说完全把表格的行列颠倒,有点像那种旋转矩阵,请问如何用sql 语句实现?


if exists (select * from dbo.sysobjects
where id = object_id(N '[dbo].[p_zj] ') and OBJECTPROPERTY(id, N 'IsProcedure ') = 1)
drop proced