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
*/ 

Oracle常見問題集(四)

 21. 用EXISTS替換DISTINCT當提交一個包含一對多表資訊(比如部門表和雇員表)的查詢時,避免在SELECT子句中使用DISTINCT.一般可以考慮用EXIST替換 例如:低效:SELEC...
  • hiyaolee
  • hiyaolee
  • 2004年10月06日 17:03
  • 3230

行列互换

行转列在SQL2000不受变量字符限制,列数转为行数
  • roy_88
  • roy_88
  • 2008年07月26日 18:09
  • 8094

Oracle常見問題集(二)

71. 內核參數的應用 shmmax含義:這個設置並不決定究竟Oracle資料庫或者作業系統使用多少實體記憶體,只決定了最多可以使用的記憶體數目。這個設置也不影響作業系統的內核資源。 設置方法:0.5...
  • hiyaolee
  • hiyaolee
  • 2004年10月06日 16:39
  • 1531

ASP.NET 常見問題解答(二)

怎样实现TextBox显示为下划线的效果?  解决方法:  可以使用CSS样式表来控制:    .myline { BORDER-RIGHT: #000000 0px solid; BORDER-TO...
  • lv_ping
  • lv_ping
  • 2008年12月24日 17:17
  • 396

Oracle常見問題集(一)

一.常見問題1. Oracle安裝完成後的初始口令 internal/oraclesys/change_on_installsystem/managerscott/tigersysman/oem_te...
  • hiyaolee
  • hiyaolee
  • 2004年10月06日 16:36
  • 1673

Oracle常見問題集(三)

151. 如何監控 SGA 中字典緩衝區的命中率?select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100"miss rati...
  • hiyaolee
  • hiyaolee
  • 2004年10月06日 16:48
  • 1435

SQLServer DBA常見問題

In the latest installment of the SQL Server interview questions, we will outline questions suitable ...
  • Lammy0926
  • Lammy0926
  • 2010年03月17日 08:38
  • 440

linux編程常見問題

1.undefined reference to 'pthread_create'问题解决 问题原因:     pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthr...
  • wfziyou
  • wfziyou
  • 2014年02月13日 17:25
  • 355

ASP.NET 常見問題解答

问题6:在datagrid里添加了模板列,模板列里是个imagebutton,点击这个imagebutton要删除该行的数据,请问题如何获取其ID号?答案:public void BindToData...
  • lv_ping
  • lv_ping
  • 2008年12月24日 17:06
  • 532

一些常見的SQL效能問題

1.      對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。  2.      應儘量避免在 where 子句中對欄位進行 null 值判斷...
  • Avan_Lau
  • Avan_Lau
  • 2010年03月02日 11:26
  • 3460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CSDN SQL版常見問題之四--行列互換
举报原因:
原因补充:

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