共計 2935 個字符,預(yù)計需要花費 8 分鐘才能閱讀完成。
這篇文章將為大家詳細講解有關(guān) SQL 中如何實現(xiàn)行轉(zhuǎn)列 Pivot 函數(shù),丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
先來創(chuàng)建一個 DailyIncome 表
create table DailyIncome(VendorId nvarchar(10), IncomeDay nvarchar(10), IncomeAmount int)
--VendorId 供應(yīng)商 ID,
--IncomeDay 收入時間
--IncomeAmount 收入金額
緊接著來插入數(shù)據(jù)看看
(留意看下,有的供應(yīng)商某天中會有多次收入,應(yīng)該是分批進賬的)
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ù)是能夠完全給展示了,但好像一眼望去不能得到對我們用處更大的信息,比如說我們想得到每個供應(yīng)商的每天的總收入,這時我們應(yīng)該做一些數(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) SUN
from 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ù),應(yīng)該理解代碼注釋中的這幾步。
第一步:肯定是要明白數(shù)據(jù)源了,這里是 DailyIncome
第二步:要明白要想讓哪一列的值做新的列名字
第三步:要明白對于這新的列要求那些值呢?
下面有個練習題目, 做之前不要看答案啊
問:對于 SPIKE 這家供應(yīng)商來說,每天最大的入賬金額。
select * from DailyIncome
pivot (max (IncomeAmount) for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) as MaxIncomePerDay
where VendorId in (SPIKE)
關(guān)于“SQL 中如何實現(xiàn)行轉(zhuǎn)列 Pivot 函數(shù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。