首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

比较复杂的行列转换的有关问题

2011-12-27 
比较复杂的行列转换的问题行列转换行列转换假设有张学生成绩表(CJ)如下Name型号适用类型……微星945PNEO3-F9

比较复杂的行列转换的问题
行列转换    
  行列转换

假设有张学生成绩表(CJ)如下
Name                               型号                         适用类型     ……
微星   945P   NEO3-F       945P   NEO3-F               台式机
微星   P965   Neo-F           900                             台式机

想变成        
项                       微星   945P   NEO3-F               微星   P965   Neo-F                
型号                   945P   NEO3-F                         P965   Neo-F        
适用类型                     台式机                         台式机                  
……                           ……                                 ……
这有点类似于太平洋电脑网中的电脑对比分析。请问如何转换?


[解决办法]
要是我就只会重新循环构造Datatable了
[解决办法]
生成动态table
[解决办法]
两个datatable进行行列互换
[解决办法]
mark
[解决办法]
在存储过程中用CASE,重新布局一下
[解决办法]
比如:你新建一个目标结构的临时表,然后CASE条件筛选,填充新结构,输出临时表即可
[解决办法]
因為數據是動態的,所以需要使用動態SQL語句。

--建立測試環境
Create Table CJ
(NameNvarchar(100),
型号Nvarchar(100),
适用类型Nvarchar(50))
Insert CJ Select N '微星 945P NEO3-F ', '945P NEO3-F ', N '台式机 '
Union All Select N '微星 P965 Neo-F ', '900 ', N '台式机 '
GO
--建立存儲過程
Create ProceDure SP_TEST
As
Declare @S1 Nvarchar(4000), @S2 Nvarchar(4000)
Select @S1 = N ' Select 项 ', @S2 = ' '

Select @S1 = @S1 + ' , Max(Case Name When N ' ' '+ Name + N ' ' ' Then 项目 Else ' ' ' ' End) As [ ' + Name + '] '
From CJ Group By Name

Select @S2 = @S2 + ' Union All Select Name, N ' ' ' + Name + N ' ' ' As 项, ' + Name + N ' As 项目 From CJ '
From SySColumns Where ID = OBJECT_ID( 'CJ ') And Name != 'Name ' Order By ColID

Select @S1 = @S1 + ' From ( ' + Stuff(@S2, 1, 11, ' ') + N ') A Group By 项 '
EXEC(@S1)
GO
--測試
EXEC SP_TEST
GO
--刪除測試環境
Drop Table CJ
Drop ProceDure SP_TEST
--結果
/*
项微星 945P NEO3-F微星 P965 Neo-F
型号945P NEO3-F900
适用类型台式机台式机
*/

热点排行