SQL SERVER PIVOT与用法解释
在数据库操作中,有些时候我们遇到需要实现“行转列”需求,例如一下的表为某店铺的一周收入情况表:
WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL)
我们先插入一些模拟数据:
INSERT INTO WEEK_INCOME SELECT '星期一',1000 UNION ALL SELECT '星期二',2000 UNION ALL SELECT '星期三',3000 UNION ALL SELECT '星期四',4000 UNION ALL SELECT '星期五',5000 UNION ALL SELECT '星期六',6000 UNION ALL SELECT '星期日',7000
一般我们最经常使用的查询是查询一周中每天或某几天的收入,例如查询周一至周日全部的收入:
SELECT WEEK,INCOME FROM WEEK_INCOME
得到如下的查询结果集:
WEEK
星期一
星期二
星期三
星期四
星期五
星期六
星期日
但是在一些情况下(往往是某些报表中),我们希望再一行中显示周一至周日的收入,这时候查询结果集应该是这样的:
星期一
1000
这种情况下,SQL查询语句可以这样写:
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
但是,在SQL
SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日] FROM WEEK_INCOME PIVOT ( SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]) )TBL
请参考MSDN中关于PIVOT的用法:
http://technet.microsoft.com/zh-cn/library/ms177410(v=sql.105).aspx
但是MSDN上的描述太过于规范严肃,我看了半天还没弄清楚怎样使用PIVOT,搞不清楚PIVOT里面的语法的含义。于是又google了很多资料,已经通过上面提高的WEEK_INCOME表例子作了试验,最终稿清楚了其用法。在网上有篇博文解释的很好:T-SQL PIVOT姙法剖析
编辑推荐:
- SQLSERVERPIVOT与用法解释03-02
- IX 对SQL服务器分析服务的更强大支持(一)03-02
- XI 关键性能指标,动作和名称集(二)03-02
- 隆重推荐【SQLServer】127个SQLserver热门资料汇总(转)03-02
- VII -条件格式与数据透视表(一)03-02
- 数据集函数Part1 概述(一)03-02
- partition table(2)03-02
- 对编辑公式功能的改进Part 4_名称03-02
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
