国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > 文庫 > 正文

SQL基礎(chǔ)教程之行轉(zhuǎn)列Pivot函數(shù)

2020-10-29 21:45:44
字體:
供稿:網(wǎng)友

前言

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

讓我們先從一個虛構(gòu)的場景中來著手吧

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

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

緊接著來插入數(shù)據(jù)看看

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

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)

讓我們先來看看前十行數(shù)據(jù):

select top 10 * from DailyIncome

如圖所示:


DailyIncome

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

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

得到如下的結(jié)果:


case when結(jié)果

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

這樣寫可能是有些麻煩,別著急,我們用Pivot函數(shù)進行行轉(zhuǎn)列試下。

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

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

第一步:肯定是要明白數(shù)據(jù)源了,這里是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.行轉(zhuǎn)列:SQL SERVER PIVOT與用法解釋

總結(jié)

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 九台市| 库伦旗| 思茅市| 仪陇县| 长治县| 堆龙德庆县| 伊宁县| 特克斯县| 游戏| 上杭县| 浪卡子县| 禹州市| 锡林郭勒盟| 柞水县| 明水县| 东海县| 塔河县| 富平县| 韶山市| 英德市| 杨浦区| 旺苍县| 尤溪县| 吴旗县| 库尔勒市| 丰顺县| 五峰| 锦州市| 汉寿县| 梧州市| 荣昌县| 晋宁县| 呼伦贝尔市| 保亭| 芒康县| 遂宁市| 玉门市| 盱眙县| 大悟县| 新民市| 珠海市|