前言
這是總結sql知識點的第二篇文章,一次只總結乙個知識點,盡量說明白。上次我們談到行轉列,用的是pivot函式,這次我們來談談unpivot函式。(這裡是用的資料庫是sqlserver,與其他資料庫是類似的,大家放心看就好)
先看乙個小問題
customercustom程式設計客棧er
在這張圖中,表示的是顧客用不同手機號給phone1、phone2、phone3撥打**的情況,但是機靈的程式設計客棧你,想變個花樣來看看,比如下面這樣的。
unpivotunpivot
大家想想看如何實現呢?想下,2分鐘後再看喲
先建立資料
create table dbo.customerphones
( customerid int primary key, -- fk
phone1 varchar(32),
phone2 varchar(32),
phone3 varchar(32)
);insert dbo.customerphones
(customerid, phone1, phone2, phone3)
values
(1,'705-491-1111', '705-491-1110', null),
(2,'613-492-2222', null, null),
(3,'416-493-3333', '416-493-3330', '416-493-3339');
select * from dbo.customerphones
檢視資料如下:
datadataupivot 實現行轉列
selwww.cppcns.comect * from dbo.customerphones -----資料來源
unpivot
( phone for phones in (phone1, phone2, phone3)
##phone1、phone2、phone3這些列的結果轉為行上的結果,成為一列,
##並且有了新的列名為phone
) up
結果如下:
resultresult
參考文獻:
1.use sql server's unpiv operator to help normalize output
2.sql之行bgziry轉列pivot用法
總結本文標題: sql知識點之列轉行unpivot函式
本文位址:
sql 總結知識點
對於存放時間格式為2003090709 56 00 轉換為datetime型別方法 cast stuff a.cyrq,9,0,as datetime 結果為 2003 09 07 09 56 00.000 而將標準datetime型別轉換為字元型方法為 declare begin datetime...
sql 小知識點
1.group 用法 很多時候我們需要分組函式來統計資料,在此過程中因為業務問題可能會用到別名,此時sql可能會寫成如下樣子 select a.fee reserveas fee other,count 1 as count no from t expenses bill a group by a....
SQL小知識點
1 left join 返回左表中的所有行,即使右表中沒有匹配,返回一和虛表 包括兩個表的所有列 沒有匹配的字段為null 2 字串拼接符用concat或是 因為題目判定系統使用的是sqlite3,所以必須按sqlite3的寫法來做,insert or ignore into actor value...