CSDN SQL版常見問題之四--行列互換

原创 2009年10月11日 11:57:00

/*
--轉載請注明,謝謝
--作者:  Paoluo
--日期:  2007-08-31
--用途:  將表中的列名轉為Type的數據
*/

--創建測試環境
Create Table TEST
(ID Int,
 A Int,
 B Int,
 C Int)

--插入數據
Insert TEST Select 1, 100, 90, 0
Union All Select 2, 80, 85, 92
Union All Select 3, 87, 0, 0
GO
--測試
--察看原表數據
Select * From TEST

--如果列名已知
--寫出列名已知情況下的語句,是希望能幫助大家更好的理解動態SQL語句
--下面EXEC(@S)中執行即為此語句
Select * From (
 Select ID, 'A' As Type, A As Score From TEST
 Union
 Select ID, 'B' As Type, B As Score From TEST
 Union
 Select ID, 'C' As Type, C As Score From TEST
) A
Where
 Score != 0
Order By
 ID, Type

--如果Type不是固定的,使用動態SQL語句
--定義變量
Declare @S Varchar(8000)
--賦初值,此句不能少
Select @S = ''
--從系統表SysColumns中循環得到列名(Name),並使用Name拼結語句
Select @S = @S + ' Union Select ID, ''' + Name + ''' As Type, ' + Name + ' As Score From TEST'
From SysColumns Where ID = OBJECT_ID('TEST') Order By ColID
--去掉前面多於的Union, 並去掉為0的Score,加上排序
Select @S = 'Select * From (' + Stuff(@S, 1, 7 ,'') + ' ) A Where Score != 0 Order By ID, Type'
--執行動態SQL語句
EXEC(@S)
GO
--刪除測試環境
Drop Table TEST
--結果
/*
--表中原來數據
ID A B C
1 100 90 0
2 80 85 92
3 87 0 0

--實現效果
ID Type Score
1 A 100
1 B 90
2 A 80
2 B 85
2 C 92
3 A 87
*/ 

CSDN操作系统板块常见问题

  • 2012年04月20日 10:36
  • 72KB
  • 下载

CSDN操作系统版块常见问题

  • 2009年07月03日 13:28
  • 72KB
  • 下载

【CSDN常见问题解答】Thread的run()和start()方法

看清楚Thread类中run()和start()方法的区别:run()方法:如果在其他地方调用run方法,就是调用一个普通方法。和其他调用方法一样,比如person.eat(); 而且直接调用run可...

安装SQL2008常见问题及解决方法

  • 2015年03月30日 22:09
  • 197KB
  • 下载

SQL2005安装及常见问题解决方法

  • 2013年01月20日 22:40
  • 916KB
  • 下载

【CSDN常见问题解答】JSON和XML格式互相转换

JSON格式和XML格式都是比较常见的数据存储格式。但是有时候我们会从接口从服务器或者其他途径调用返回的结果并不是我们想要的。常见的就是我需要XML格式的,结果服务器返回给我的是JSON格式。今天的常...

sql常见问题

  • 2014年03月24日 15:31
  • 436KB
  • 下载

CSDN博客常见问题

博客积分规则 博客积分是CSDN对用户努力的认可和奖励,也是衡量博客水平的重要标准。博客等级也将由博客积分唯一决定。积分规则具体如下: 1、每发布一篇原创或者翻译文章:可获得10分;2、每...
  • bat67
  • bat67
  • 2016年07月24日 21:54
  • 296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CSDN SQL版常見問題之四--行列互換
举报原因:
原因补充:

(最多只允许输入30个字)