久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQL中如何實現(xiàn)行轉(zhuǎn)列Pivot函數(shù)

150次閱讀
沒有評論

共計 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)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計2935字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 常山县| 利辛县| 泗洪县| 桓仁| 岳阳县| 廉江市| 新田县| 建宁县| 鹤岗市| 宣化县| 布拖县| 含山县| 高陵县| 舞钢市| 巴彦淖尔市| 根河市| 高青县| 五河县| 揭阳市| 昌都县| 进贤县| 湘乡市| 惠来县| 牟定县| 肃北| 广河县| 高雄县| 壶关县| 嘉荫县| 榆社县| 建湖县| 公主岭市| 汾阳市| 瓦房店市| 阿拉善右旗| 安丘市| 建平县| 甘孜县| 岱山县| 扶绥县| 南通市|