SQL通過PIVOT UNPIVOT實現行列轉換

2021-06-10 20:45:28 字數 1369 閱讀 2956

在sqlserver 2005中,使用關鍵字pivot/unpivot,可以很容易的實現行列轉換的需求。現在將通過兩個簡單的例子詳細講解pivot/unpivot的用法。

一、pivot的用法:

首先建立測試表,然後插入測試資料 :

create table test(id int,name varchar(20),quarter int,profile int) 

insert into test values(1,'a',1,1000)

insert into test values(1,'a',2,2000)

insert into test values(1,'a',3,4000)

insert into test values(1,'a',4,5000)

insert into test values(2,'b',1,3000)

insert into test values(2,'b',2,3500)

insert into test values(2,'b',3,4200)

insert into test values(2,'b',4,5500)

使用pivot將四個季度的利潤轉換成橫向顯示:

select id,name,

[1] as "一季度",

[2] as "二季度",

[3] as "三季度",

[4] as "四季度"

from

test

pivot

(sum(profile)

for quarter in

([1],[2],[3],[4])

)as pvt

二、unpivot的用法:

首先建立測試表,然後插入測試資料:

drop table test

create table test(id int,name varchar(20), q1 int, q2 int, q3 int, q4 int)

insert into test values(1,'a',1000,2000,4000,5000)

insert into test values(2,'b',3000,3500,4200,5500)

使用unpivot,將同一行中四個季度的列資料轉換成四行資料:

select id,name,quarter,profile

from

test

unpivot

(profile

for quarter in

([q1],[q2],[q3],[q4])

) as unpvt

通過 sysprocesses 解決Sql死鎖問題

按照下述四步即可輕鬆解決死鎖問題 第一步 查詢是否發生死鎖 select dbid,from sys.sysprocesses where 1 1and blocked 0 第二步 查詢發生阻塞或死鎖的資料庫 方法一 sp helpdb 方法二 select dbid,name from sys.s...

通過User agent進行SQL注入

宣告 本文由bypass整理並翻譯,僅用於安全研究和學習之用。我發現了乙個sql注入漏洞 dashboard datagov csv to json,可以通過user agent http請求頭利用它。我沒有從資料庫中提取任何資料,我已經使用具有算術運算的sleep sql查詢確認了漏洞。sleep...

通過sql陣列動態建立Recordset

dim strtemp strtemp session item 前面傳來的變數,比如許可權,不同的許可權讀取不同的內容。拆分字串 a split strtemp,unum ubound a lnum lbound a 定義sql陣列 dim strsql for i lnum to unum di...