SQL基础教程之行转列Pivot函数
网络编程 2021-07-05 16:49www.168986.cn编程入门
这篇文章主要给大家介绍了关于SQL基础教程之行转列Pivot函数的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL具有一定的参考学习价值,需要的朋友们狼蚁网站SEO优化来一起学习学习吧
前言
未来的一个月时间中,会一系列SQL知识点,一次只一个知识点,尽量说明白,狼蚁网站SEO优化来说说SQL 中常用Pivot 函数(这里是用的数据库是SQLSERVER,与其他数据库是类似的,大家放心看就好)
让我们先从一个虚构的场景中来着手吧
万国来朝,很多供应商每天都汇报各自的收入情况。先来创建一个DailyIne 表
create table DailyIne(VendorId nvarchar(10), IneDay nvarchar(10), IneAmount int) --VendorId 供应商ID, --IneDay 收入时间 --IneAmount 收入金额
紧接着来插入数据看看
(留意看下,有的供应商某天中会有多次收入,应该是分批进账的)
insert into DailyIne values ('SPIKE', 'FRI', 100) insert into DailyIne values ('SPIKE', 'MON', 300) insert into DailyIne values ('FREDS', 'SUN', 400) insert into DailyIne values ('SPIKE', 'WED', 500) insert into DailyIne values ('SPIKE', 'TUE', 200) insert into DailyIne values ('JOHNS', 'WED', 900) insert into DailyIne values ('SPIKE', 'FRI', 100) insert into DailyIne values ('JOHNS', 'MON', 300) insert into DailyIne values ('SPIKE', 'SUN', 400) insert into DailyIne values ('JOHNS', 'FRI', 300) insert into DailyIne values ('FREDS', 'TUE', 500) insert into DailyIne values ('FREDS', 'TUE', 200) insert into DailyIne values ('SPIKE', 'MON', 900) insert into DailyIne values ('FREDS', 'FRI', 900) insert into DailyIne values ('FREDS', 'MON', 500) insert into DailyIne values ('JOHNS', 'SUN', 600) insert into DailyIne values ('SPIKE', 'FRI', 300) insert into DailyIne values ('SPIKE', 'WED', 500) insert into DailyIne values ('SPIKE', 'FRI', 300) insert into DailyIne values ('JOHNS', 'THU', 800) insert into DailyIne values ('JOHNS', 'SAT', 800) insert into DailyIne values ('SPIKE', 'TUE', 100) insert into DailyIne values ('SPIKE', 'THU', 300) insert into DailyIne values ('FREDS', 'WED', 500) insert into DailyIne values ('SPIKE', 'SAT', 100) insert into DailyIne values ('FREDS', 'SAT', 500) insert into DailyIne values ('FREDS', 'THU', 800) insert into DailyIne values ('JOHNS', 'TUE', 600)
让我们先来看看前十行数据
select 10 from DailyIne
如图所示
DailyIne
虽然数据是能够完全给展示了,但好像一眼望去不能得到对我们用处更大的信息,比如说我们想得到每个供应商的每天的总收入,这时我们应该做一些数据形式的转变了,平常的所用的是这样的。
select VendorId , sum(case when IneDay='MoN' then IneAmount else 0 end) MON, sum(case when IneDay='TUE' then IneAmount else 0 end) TUE, sum(case when IneDay='WED' then IneAmount else 0 end) WED, sum(case when IneDay='THU' then IneAmount else 0 end) THU, sum(case when IneDay='FRI' then IneAmount else 0 end) FRI, sum(case when IneDay='SAT' then IneAmount else 0 end) SAT, sum(case when IneDay='SUN' then IneAmount else 0 end) SUN from DailyIne group by VendorId
得到如下的结果
case when结果
如果大家仔细看结果的话,会有这样的发现,这是把VendorID进行了分组,并且对于每组中IneDay这一列中的值都变成了新的列名字,然后对IneAmount进行求和操作。
这样写可能是有些麻烦,别着急,我们用Pivot函数进行行转列试下。
select from DailyIne ----第一步 pivot ( sum (IneAmount) ----第三步 for IneDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN]) ---第二步 ) as AvgInePerDay
来解释下,要想用好Pivot函数,应该理解代码注释中的这几步。
第一步肯定是要明白数据源了,这里是DailyIne
第二步要明白要想让哪一列的值做新的列名字
第三步要明白对于这新的列要求那些值呢?
狼蚁网站SEO优化有个练习题目,做之前不要看答案啊
问对于SPIKE这家供应商来说,每天最大的入账金额。
select from DailyIne pivot (max (IneAmount) for IneDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) as MaxInePerDay where VendorId in ('SPIKE')
参考链接如下
1.
2.
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对狼蚁SEO的支持。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程