SQL知識點之列轉行Unpivot函式

2022-09-25 16:36:09 字數 1214 閱讀 9595

前言

這是總結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...