日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server 行列转换(1)

發布時間:2024/4/15 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 行列转换(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考前一個SQL的行列轉換例子http://www.cnblogs.com/insus/articles/1969896.html ,覺得不夠自由,需要去預先知道記錄的內容去定義行或列。

下面這個方法,是Insus.NET常用一種處理方案,為數據量較少而準備。代碼比較長,基本上寫有說明,理解起來,一般不會有多大困難。

代碼如下:?

View Code --由于原記錄表沒有一個唯一主鍵,只好新建一個臨時表,把需要處理的記錄先預存入這個臨時表中
BEGIN
????
IF?OBJECT_ID?('[dbo].[#t]')?IS?NOT?NULL
????
DROP?TABLE?[dbo].[#t]
????
CREATE?TABLE?[dbo].[#t]
????(
????????id?
INT?IDENTITY(1,1),??
????????RId?
NVARCHAR(2),
????????DT?DATE,
????????Hits?
INT
????)
????
INSERT?INTO?[dbo].[#t]?SELECT?[RId],[DT],[Hits]?FROM?[dbo].[RecordHits]????
END


--創建一個臨時表,為處理記錄所需要表最初表結構
BEGIN
IF?OBJECT_ID('[dbo].[#rList]')?IS?NOT?NULL
DROP?TABLE?[dbo].[#rList]
CREATE?TABLE?[dbo].[#rList]
(
????RId?
NVARCHAR(2)
)
END

BEGIN
????
????
--宣告一些變量,為循環記錄時所應用
????DECLARE?@N?INT?=?1,?@R?INT
????
DECLARE?@RId?NVARCHAR(2),@DT?DATE
????
DECLARE?@Hits?INT
????
????
SET?@R?=?(SELECT?MAX([id])?FROM?[dbo].[#t])
????
WHILE?@N?<=?@R?
????
BEGIN
????????
--取出每筆記錄值
????????SELECT?@RId?=?[RId],@DT?=?[DT],@Hits?=?[Hits]?FROM?[dbo].[#t]?WHERE?[id]?=?@N????????
????????
--把日期轉換為字符串
????????DECLARE?@C?NVARCHAR(10)?=?CONVERT(NVARCHAR(10),@DT,112)
????????
--判斷此次循環的日期作為臨時表[dbo].[#rList]一個字段,如果不存在,修改這個臨時表,增加字段,反之,將略去執行下面SQL語句????????
????????EXECUTE('IF?NOT?EXISTS(SELECT?name?FROM?tempdb..syscolumns?where?id=OBJECT_ID(''tempdb..[#rList]'')?AND?tempdb..syscolumns.name?='''+?@C?+''')?ALTER?TABLE?tempdb..[#rList]?ADD?['?+?@C?+?']?NVARCHAR(10)')
????????
????????
--判斷此次循環的記錄在臨時表是否存在,如果不存在
????????IF?NOT?EXISTS?(SELECT?[RId]?FROM?[dbo].[#rList]?WHERE?[RId]?=?@RId)
????????
????????
--插入此記錄
????????INSERT?INTO?[dbo].[#rList]([RId])?VALUES?(@RId)????
????????
????????
--更新記錄。
????????EXECUTE('UPDATE?[dbo].[#rList]?SET?['+?@C?+']?=?'''+?@Hits?+'''?WHERE?[RId]?=?'''+?@RId?+'''')
????????
--循環下一筆
????????SET?@N?=?@N?+?1
????
END
END
????
--查詢處理結果
????SELECT?*?FROM?[dbo].[#rList]????

?

執行結果:

?

總結

以上是生活随笔為你收集整理的SQL Server 行列转换(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。