SQL中如何实现行转列Pivot函数
这篇文章将为大家详细讲解有关SQL中如何实现行转列Pivot函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
先来创建一个DailyIncome 表
createtableDailyIncome(VendorIdnvarchar(10),IncomeDaynvarchar(10),IncomeAmountint)--VendorId供应商ID,--IncomeDay收入时间--IncomeAmount收入金额
紧接着来插入数据看看
(留意看下,有的供应商某天中会有多次收入,应该是分批进账的)
insertintoDailyIncomevalues('SPIKE','FRI',100)insertintoDailyIncomevalues('SPIKE','MON',300)insertintoDailyIncomevalues('FREDS','SUN',400)insertintoDailyIncomevalues('SPIKE','WED',500)insertintoDailyIncomevalues('SPIKE','TUE',200)insertintoDailyIncomevalues('JOHNS','WED',900)insertintoDailyIncomevalues('SPIKE','FRI',100)insertintoDailyIncomevalues('JOHNS','MON',300)insertintoDailyIncomevalues('SPIKE','SUN',400)insertintoDailyIncomevalues('JOHNS','FRI',300)insertintoDailyIncomevalues('FREDS','TUE',500)insertintoDailyIncomevalues('FREDS','TUE',200)insertintoDailyIncomevalues('SPIKE','MON',900)insertintoDailyIncomevalues('FREDS','FRI',900)insertintoDailyIncomevalues('FREDS','MON',500)insertintoDailyIncomevalues('JOHNS','SUN',600)insertintoDailyIncomevalues('SPIKE','FRI',300)insertintoDailyIncomevalues('SPIKE','WED',500)insertintoDailyIncomevalues('SPIKE','FRI',300)insertintoDailyIncomevalues('JOHNS','THU',800)insertintoDailyIncomevalues('JOHNS','SAT',800)insertintoDailyIncomevalues('SPIKE','TUE',100)insertintoDailyIncomevalues('SPIKE','THU',300)insertintoDailyIncomevalues('FREDS','WED',500)insertintoDailyIncomevalues('SPIKE','SAT',100)insertintoDailyIncomevalues('FREDS','SAT',500)insertintoDailyIncomevalues('FREDS','THU',800)insertintoDailyIncomevalues('JOHNS','TUE',600)
让我们先来看看前十行数据:
selecttop10*fromDailyIncome
如图所示:
DailyIncome
虽然数据是能够完全给展示了,但好像一眼望去不能得到对我们用处更大的信息,比如说我们想得到每个供应商的每天的总收入,这时我们应该做一些数据形式的转变了,平常的所用的是这样的。
selectVendorId,sum(casewhenIncomeDay='MoN'thenIncomeAmountelse0end)MON,sum(casewhenIncomeDay='TUE'thenIncomeAmountelse0end)TUE,sum(casewhenIncomeDay='WED'thenIncomeAmountelse0end)WED,sum(casewhenIncomeDay='THU'thenIncomeAmountelse0end)THU,sum(casewhenIncomeDay='FRI'thenIncomeAmountelse0end)FRI,sum(casewhenIncomeDay='SAT'thenIncomeAmountelse0end)SAT,sum(casewhenIncomeDay='SUN'thenIncomeAmountelse0end)SUNfromDailyIncomegroupbyVendorId
得到如下的结果:
case when结果
如果大家仔细看结果的话,会有这样的发现,这是把VendorID进行了分组,并且对于每组中IncomeDay这一列中的值都变成了新的列名字,然后对IncomeAmount进行求和操作。
这样写可能是有些麻烦,别着急,我们用Pivot函数进行行转列试下。
select*fromDailyIncome----第一步pivot(sum(IncomeAmount)----第三步forIncomeDayin([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])---第二步)asAvgIncomePerDay
来解释下,要想用好Pivot函数,应该理解代码注释中的这几步。
第一步:肯定是要明白数据源了,这里是DailyIncome
第二步:要明白要想让哪一列的值做新的列名字
第三步:要明白对于这新的列要求那些值呢?
下面有个练习题目,做之前不要看答案啊
问:对于SPIKE这家供应商来说,每天最大的入账金额。
select*fromDailyIncomepivot(max(IncomeAmount)forIncomeDayin([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN]))asMaxIncomePerDaywhereVendorIdin('SPIKE')
关于“SQL中如何实现行转列Pivot函数”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。