首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql 横竖变化

2013-06-19 
sql 横竖变化 求救NUMNAMEXY7张三1161 李四12104王五1380 赵六2170 刘七2270 吴八23将上面数据排列为7张三

sql 横竖变化 求救

NUMNAMEXY
7  张三11
61 李四12
104王五13
80 赵六21
70 刘七22
70 吴八23

将上面数据排列为

7张三   61李四   104王五
80赵六  70刘七   60吴八


x,y其实可以看成是坐标,排列出表格,谢过各位大神!

下面是建表的代码方便各位
create table [TESTTABLE] (NUM nvarchar(50),NAME varchar(50),X int,Y int)
insert into [TESTTABLE] values('7','张三',1,1) 
insert into [TESTTABLE] values('61','李四',1,2) 
insert into [TESTTABLE] values('104','王五',1,3) 
insert into [TESTTABLE] values('80','赵六',2,1)  
insert into [TESTTABLE] values('70','刘七',2,2)  
insert into [TESTTABLE] values('70','吴八',2,3)  
SQL 横竖变化
[解决办法]

--刚刚发错了

select X,
max(case when Y=1 then NUM+NAME else '' end),
max(case when Y=2 then NUM+NAME else '' end),
max(case when Y=3 then NUM+NAME else '' end)
from [TESTTABLE] 
group by X 
X                                                                                                                                                                                                                     
----------- ---------------------------------------------------------------- ---------------------------------------------------------------- ----------------------------------------------------------------
1           7张三                                                                                                  61李四                                                                                                 104王五


2           80赵六                                                                                                 70刘七                                                                                                 70吴八

(2 行受影响)


[解决办法]

create table [TESTTABLE](NUM nvarchar(5),NAME varchar(10),X int,Y int)

insert into [TESTTABLE] values('7','张三',1,1) 
insert into [TESTTABLE] values('61','李四',1,2) 
insert into [TESTTABLE] values('104','王五',1,3) 
insert into [TESTTABLE] values('80','赵六',2,1)  
insert into [TESTTABLE] values('70','刘七',2,2)  
insert into [TESTTABLE] values('70','吴八',2,3)  

select NUM,NAME,X,Y from [TESTTABLE]

/*
NUM   NAME       X           Y
----- ---------- ----------- -----------
7     张三         1           1
61    李四         1           2
104   王五         1           3
80    赵六         2           1
70    刘七         2           2
70    吴八         2           3

(6 row(s) affected)
*/


select [1],[2],[3]
 from (select NUM+NAME 'NN',X,Y from [TESTTABLE]) a
 pivot(max(NN) for Y in([1],[2],[3])) p
 
/*
1               2               3
--------------- --------------- ---------------
7张三             61李四            104王五
80赵六            70刘七            70吴八

(2 row(s) affected)


*/

热点排行