CSDN SQL版常見問題之三--列轉行

原创 2009年10月11日 11:56: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
*/

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

微信小程序开发常见问题FAQ之三

微信小程序遇到问题怎么办?遇到微信小程序方面的问题,该去哪里提问呢?一起来看看第九程序为您整理的微信开发者社区开发常见问题FAQ吧~在文中,您可使用「CTRL+F」,输入关键词来快速找寻您需要的答案。

CSDN博客积分标准(含常见问题和勋章等)

推荐博客规则 CSDN博客所有用户均有机会推荐自己的博文到博客频道首页。发布博文时选中“发布到CSDN博客首页”单选框即可。 用户推荐要求:a. 博主积分需超过100分,否则不能推荐自己博客文...

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

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

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

JSON格式和XML格式都是比较常见的数据存储格式。但是有时候我们会从接口从服务器或者其他途径调用返回的结果并不是我们想要的。常见的就是我需要XML格式的,结果服务器返回给我的是JSON格式。今天的常...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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