博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL SERVER PIVOT与用法解释
阅读量:5144 次
发布时间:2019-06-13

本文共 1417 字,大约阅读时间需要 4 分钟。

在操作中,有些时候我们遇到需要实现“行转列”需求,例如一下的表为某店铺的一周收入情况表:

WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL)

我们先插入一些模拟:

INSERT INTO WEEK_INCOME SELECT '星期一',1000 UNION ALL SELECT '星期二',2000 UNION ALL SELECT '星期三',3000 UNION ALL SELECT '星期四',4000UNION ALL SELECT '星期五',5000 UNION ALL SELECT '星期六',6000 UNION ALL SELECT '星期日',7000

 

一般我们最经常使用的查询是查询一周中每天或某几天的收入,例如查询周一至周日全部的收入:

SELECT WEEK,INCOME FROM WEEK_INCOME

得到如下的查询结果集:

WEEK           INCOME

星期一           1000
星期二           2000
星期三           3000
星期四           4000
星期五           5000
星期六           6000
星期日           7000

 

但是在一些情况下(往往是某些报表中),我们希望再一行中显示周一至周日的收入,这时候查询结果集应该是这样的:

星期一   星期二   星期三   星期四   星期五   星期六   星期日

1000    2000    3000    4000    5000    6000    7000

这种情况下,可以这样写:

SELECT SUM(CASE WEEK WHEN '星期一' THEN INCOME END) AS [星期一], SUM(CASE WEEK WHEN '星期二' THEN INCOME END) AS [星期二], SUM(CASE WEEK WHEN'星期三' THEN INCOME END) AS [星期三], SUM(CASE WEEK WHEN '星期四' THEN INCOME END) AS [星期四], SUM(CASE WEEK WHEN '星期五' THEN INCOME END) AS [星期五], SUM(CASE WEEK WHEN '星期六' THEN INCOME END) AS [星期六], SUM(CASE WEEK WHEN '星期日' THEN INCOME END) AS [星期日] FROM WEEK_INCOME

但是,在 SERVER 2005中提供了更为简便的方法,这就是"PIVOT"关系运算符。(相反的“列转行”是UNPIVOT),一下是使用PIVOT实现“行转列”

SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日] FROM WEEK_INCOME PIVOT ( SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]) )TBL

 

 

请参考MSDN中关于PIVOT的用法:

 

但是MSDN上的描述太过于规范严肃,我看了半天还没弄清楚怎样使用PIVOT,搞不清楚PIVOT里面的语法的含义。于是又google了很多资料,已经通过上面提高的WEEK_INCOME表例子作了试验,最终稿清楚了其用法。在网上有篇博文解释的很好:

转载于:https://www.cnblogs.com/hushzhang/p/5274777.html

你可能感兴趣的文章
为什么要重写hashcode方法和equals方法
查看>>
【Mysql】索引简介
查看>>
[luogu1073 Noip2009] 最优贸易 (dp || SPFA+分层图)
查看>>
IT的灵魂是流程,流程的灵魂是业务,业务的灵魂是战略
查看>>
SQL语句执行与结果集的获取
查看>>
bzoj 3994: [SDOI2015]约数个数和
查看>>
反向树状数组
查看>>
android动画(一)Interpolator
查看>>
关于微软自带的身份和角色验证
查看>>
【产品测评】Android应用商店分析报告——百度应用
查看>>
【Android】Android取消EditText自动获取焦点
查看>>
匈牙利算法---解决最大匹配问题
查看>>
浅拷贝和深拷贝(java)
查看>>
图片延迟加载开源方案-lazysizes
查看>>
树上倍增LCA模版
查看>>
破窗效应
查看>>
tab+swiper+fixed
查看>>
js中使用EL表达式
查看>>
MySQL建表语句+添加注释
查看>>
自用正则表达式记录
查看>>