a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > 文庫 > 正文

SQL基礎教程之行轉列Pivot函數

2020-10-29 21:45:44
字體:
來源:轉載
供稿:網友

前言

未來的一個月時間中,會總結一系列SQL知識點,一次只總結一個知識點,盡量說明白,下面來說說SQL 中常用Pivot 函數(這里是用的數據庫是SQLSERVER,與其他數據庫是類似的,大家放心看就好)

讓我們先從一個虛構的場景中來著手吧

萬國來朝,很多供應商每天都匯報各自的收入情況。先來創建一個DailyIncome 表

create table DailyIncome(VendorId nvarchar(10), IncomeDay nvarchar(10), IncomeAmount int)--VendorId 供應商ID,--IncomeDay 收入時間--IncomeAmount 收入金額

緊接著來插入數據看看

(留意看下,有的供應商某天中會有多次收入,應該是分批進賬的)

insert into DailyIncome values ('SPIKE', 'FRI', 100)insert into DailyIncome values ('SPIKE', 'MON', 300)insert into DailyIncome values ('FREDS', 'SUN', 400)insert into DailyIncome values ('SPIKE', 'WED', 500)insert into DailyIncome values ('SPIKE', 'TUE', 200)insert into DailyIncome values ('JOHNS', 'WED', 900)insert into DailyIncome values ('SPIKE', 'FRI', 100)insert into DailyIncome values ('JOHNS', 'MON', 300)insert into DailyIncome values ('SPIKE', 'SUN', 400)insert into DailyIncome values ('JOHNS', 'FRI', 300)insert into DailyIncome values ('FREDS', 'TUE', 500)insert into DailyIncome values ('FREDS', 'TUE', 200)insert into DailyIncome values ('SPIKE', 'MON', 900)insert into DailyIncome values ('FREDS', 'FRI', 900)insert into DailyIncome values ('FREDS', 'MON', 500)insert into DailyIncome values ('JOHNS', 'SUN', 600)insert into DailyIncome values ('SPIKE', 'FRI', 300)insert into DailyIncome values ('SPIKE', 'WED', 500)insert into DailyIncome values ('SPIKE', 'FRI', 300)insert into DailyIncome values ('JOHNS', 'THU', 800)insert into DailyIncome values ('JOHNS', 'SAT', 800)insert into DailyIncome values ('SPIKE', 'TUE', 100)insert into DailyIncome values ('SPIKE', 'THU', 300)insert into DailyIncome values ('FREDS', 'WED', 500)insert into DailyIncome values ('SPIKE', 'SAT', 100)insert into DailyIncome values ('FREDS', 'SAT', 500)insert into DailyIncome values ('FREDS', 'THU', 800)insert into DailyIncome values ('JOHNS', 'TUE', 600)

讓我們先來看看前十行數據:

select top 10 * from DailyIncome

如圖所示:


DailyIncome

雖然數據是能夠完全給展示了,但好像一眼望去不能得到對我們用處更大的信息,比如說我們想得到每個供應商的每天的總收入,這時我們應該做一些數據形式的轉變了,平常的所用的是這樣的。

select VendorId ,sum(case when IncomeDay='MoN' then IncomeAmount else 0 end) MON,sum(case when IncomeDay='TUE' then IncomeAmount else 0 end) TUE,sum(case when IncomeDay='WED' then IncomeAmount else 0 end) WED,sum(case when IncomeDay='THU' then IncomeAmount else 0 end) THU,sum(case when IncomeDay='FRI' then IncomeAmount else 0 end) FRI,sum(case when IncomeDay='SAT' then IncomeAmount else 0 end) SAT,sum(case when IncomeDay='SUN' then IncomeAmount else 0 end) SUNfrom DailyIncome group by VendorId

得到如下的結果:


case when結果

如果大家仔細看結果的話,會有這樣的發現,這是把VendorID進行了分組,并且對于每組中IncomeDay這一列中的值都變成了新的列名字,然后對IncomeAmount進行求和操作。

這樣寫可能是有些麻煩,別著急,我們用Pivot函數進行行轉列試下。

select * from DailyIncome ----第一步pivot (sum (IncomeAmount) ----第三步for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN]) ---第二步) as AvgIncomePerDay

來解釋下,要想用好Pivot函數,應該理解代碼注釋中的這幾步。

第一步:肯定是要明白數據源了,這里是DailyIncome

第二步:要明白要想讓哪一列的值做新的列名字

第三步:要明白對于這新的列要求那些值呢?

下面有個練習題目,做之前不要看答案啊

問:對于SPIKE這家供應商來說,每天最大的入賬金額。

select * from DailyIncomepivot (max (IncomeAmount) for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) as MaxIncomePerDaywhere VendorId in ('SPIKE')

參考鏈接如下:

1.Pivot tables in SQL Server. A simple sample

2.行轉列:SQL SERVER PIVOT與用法解釋

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人免费高清 | 最新高清无码专区 | 亚洲综合色网 | 国产高清一区 | 精品国产aⅴ一区二区 | 欧美激情视频一区二区三区不卡 | 日韩成人在线免费视频 | 成人三级在线 | 狠狠的日 | 精一区二区 | 青青草国产在线 | 久久亚洲二区 | 一级片免费在线观看 | 欧美一极片 | 色婷婷综合久久久久中文一区二 | 91精品久久久久久久久久入口 | 黄色天堂网 | 日韩成人小视频 | 亚洲综合色视频在线观看 | 欧美日韩国产精品 | 三级网站视频 | 亚洲欧美国产另类 | 国产精品中文字幕在线播放 | 欧美在线一区二区三区 | 一级片免费观看 | 日本一区二区高清视频 | 国产中文字幕一区二区三区 | 中文字幕在线一区二区三区 | 国产精品夜夜春夜夜爽久久电影 | 日本草草影院 | 精品人人 | 最新国产精品精品视频 | 久久一级| 国产精品久久久久久久久久10秀 | 81精品国产乱码久久久久久 | 日本久久久久久久久久 | 天天色天天草 | 91在线精品一区二区 | 久久电影中文字幕 | 岛国毛片| 国产精品久久久久aaaa九色 |