5分鐘學(xué)會(huì)SQL SERVER行轉(zhuǎn)列、列轉(zhuǎn)行饲宿,PIVOT操作

我是firewang秩命,用技術(shù)讓數(shù)據(jù)說(shuō)話尉共,用數(shù)據(jù)讓你我進(jìn)化

本文目錄:

? PIVOT語(yǔ)法

? PIVOT示例

? UNPIVOT語(yǔ)法

? UNPIVOT示例

? PIVOT和UNPIVOT

PIVOT?通過(guò)將表達(dá)式中的一個(gè)列的唯一值轉(zhuǎn)換為輸出中的多列(即行轉(zhuǎn)列),來(lái)輪替表值表達(dá)式弃锐。PIVOT 在需要對(duì)最終輸出所需的所有剩余列值執(zhí)行聚合時(shí)運(yùn)行聚合袄友。與 PIVOT 執(zhí)行的操作相反,UNPIVOT 將表值表達(dá)式的列輪換為行(即列轉(zhuǎn)行)霹菊。

但是需要注意得是剧蚣,UNPIVOT 并不完全是 PIVOT 的逆操作。PIVOT 執(zhí)行聚合旋廷,并將多個(gè)可能的行合并為輸出中的一行鸠按。UNPIVOT 不重現(xiàn)原始表值表達(dá)式的結(jié)果,因?yàn)樾幸驯缓喜ⅰ?/p>

--?PIVOT?語(yǔ)法

SELECT?<非透視的列>,

????[第一個(gè)透視的列]?AS?<列名稱>,

????[第二個(gè)透視的列]?AS?<列名稱>,

????...

????[最后一個(gè)透視的列]?AS?<列名稱>,

FROM

????(<生成數(shù)據(jù)的?SELECT?查詢>)?

????AS?<源查詢的別名>

PIVOT

(

????<聚合函數(shù)>(<要聚合的列>)

FOR

[<包含要成為列標(biāo)題的值的列>]

????IN?(?[第一個(gè)透視的列],?[第二個(gè)透視的列],

????...?[最后一個(gè)透視的列])

)?AS?<透視表的別名>

<可選的?ORDER?BY?子句>;


實(shí)例的數(shù)據(jù)使用的是和?SQL筆試50題同樣的數(shù)據(jù)饶碘,?使用的平臺(tái)是SQLFIDDLE(提供在線數(shù)據(jù)庫(kù))目尖,鑒于近期全球病情的影響,各種網(wǎng)站都有一定幾率無(wú)法提供服務(wù)扎运,本次提供了SQLite數(shù)據(jù)庫(kù)瑟曲,已存入測(cè)試數(shù)據(jù)。

下載地址(13天內(nèi)有效):https://c-t.work/s/1786d12bba3e4c

--?查看每個(gè)人的年齡豪治,性別洞拨,三門課成績(jī)

select

sid,sname,sage,ssex,[語(yǔ)文],[數(shù)學(xué)],[英語(yǔ)]

from

(

select?a.sid,a.sname,a.sage,a.ssex,c.cname,b.score

??from?Student?a

??left?join?Score?b?

??on?a.sid=b.sid

??left?join?Course?c

??on?b.cid?=?c.cid

)?source_table

pivot(

??sum(score)?for

cname?in?(

??[語(yǔ)文],[數(shù)學(xué)],[英語(yǔ)]

)

?????)?t

student_pivot

將上述結(jié)果新建表 Student_pivot

create?table?Student_pivot?(

sid?varchar(10),sname?nvarchar(10),sage?datetime,ssex?nvarchar(10),?"語(yǔ)文"?int,?"數(shù)學(xué)"?int,"英語(yǔ)"?int);

insert?into?Student?values('01'?,?N'趙雷'?,?'1990-01-01'?,?N'男',?80,?90,?99);

insert?into?Student?values('02'?,?N'錢電'?,?'1990-12-21'?,?N'男',?70,?60,?80);

insert?into?Student?values('03'?,?N'孫風(fēng)'?,?'1990-05-20'?,?N'男',?80,?80,?80);

insert?into?Student?values('04'?,?N'李云'?,?'1990-08-06'?,?N'男',?50,?30,?20);

insert?into?Student?values('05'?,?N'周梅'?,?'1991-12-01'?,?N'女',?76,?87,?null);

insert?into?Student?values('06'?,?N'吳蘭'?,?'1992-03-01'?,?N'女',?31,?null,?34);

insert?into?Student?values('07'?,?N'鄭竹'?,?'1989-07-01'?,?N'女',?null,?89,?98);

insert?into?Student?values('08'?,?N'王菊'?,?'1990-01-20'?,?N'女',?null,null,null);


--?unpivot?語(yǔ)法

SELECT?[columns?not?unpivoted],

?????[unpivot_column],

???????[value_column],

FROM

(<source?query>)

AS?<alias?for?the?source?data>

UNPIVOT?(?[value_column]?FOR?[unpivot_column]?IN?(?<column_list>?)?)?

???AS?<alias?for?unpivot>

Where:

--[columns not unpivoted]:?沒(méi)有被轉(zhuǎn)換的列名。

--[unpivot_column]:?轉(zhuǎn)換的各列所匯總到的單列的名稱负拟。

--[value_column]:?轉(zhuǎn)換的各列數(shù)據(jù)所匯總到的單列的名稱烦衣。

--<source query>:?源數(shù)據(jù)。

--<alias for the source data>:?為源數(shù)據(jù)轉(zhuǎn)換后的表確定一個(gè)別名掩浙。

--<column_list>:??被轉(zhuǎn)換的列的各列的名稱花吟。

--<alias for unpivot>:?轉(zhuǎn)換操作的整個(gè)過(guò)程的別名。


然后將這張結(jié)果表里的數(shù)據(jù)UNPIVOT回去厨姚。

select?

??sid,

??sname,

??sage,

??ssex,

??subject,

??score

from?

(select?*?from?Student_pivot)?as?sp

UNPIVOT(

??score?for?subject?in?([語(yǔ)文],[數(shù)學(xué)],[英語(yǔ)])?

)?as?t

特別注意那些成績(jī)?yōu)榭盏男杏涗浂紱](méi)有出現(xiàn)衅澈!


本文項(xiàng)目地址:

https://github.com/firewang/sql50

參考網(wǎng)址:

https://docs.microsoft.com/zh-cn/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15

https://sql50.readthedocs.io/zh_CN/latest/

https://github.com/firewang/sql50

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市遣蚀,隨后出現(xiàn)的幾起案子矾麻,更是在濱河造成了極大的恐慌,老刑警劉巖芭梯,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件险耀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡玖喘,警方通過(guò)查閱死者的電腦和手機(jī)甩牺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)累奈,“玉大人贬派,你說(shuō)我怎么就攤上這事急但。” “怎么了搞乏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵波桩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我请敦,道長(zhǎng)镐躲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任侍筛,我火速辦了婚禮萤皂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匣椰。我一直安慰自己裆熙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布禽笑。 她就那樣靜靜地躺著入录,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒲每。 梳的紋絲不亂的頭發(fā)上纷跛,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天喻括,我揣著相機(jī)與錄音邀杏,去河邊找鬼。 笑死唬血,一個(gè)胖子當(dāng)著我的面吹牛望蜡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拷恨,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼脖律,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了腕侄?” 一聲冷哼從身側(cè)響起小泉,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冕杠,沒(méi)想到半個(gè)月后微姊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡分预,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年兢交,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笼痹。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡配喳,死狀恐怖酪穿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晴裹,我是刑警寧澤被济,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站涧团,受9級(jí)特大地震影響溉潭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜少欺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一喳瓣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赞别,春花似錦畏陕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至崎页,卻和暖如春鞠绰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背飒焦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工蜈膨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牺荠。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓翁巍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親休雌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灶壶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容