PIVOT&UNPIVOT
如果是家电销售员,那么可能需要统计每月日销售的彩电、冰箱、空调...最大值、最小值、平均值等
如果你是耳鼻喉科医生,那么可能需要统计月度年度日接客咽炎、喉炎、鼻炎...最大值、最小值、平均值等
如果你是程序媛,那么可能需要统计月度日处理bug、新增功能、支援...等类别问题量的最大值、最小值、平均值等
那么诸如此类问题,需要一行显示一人负责所有相关类别数值时,就是pivot派上用场之时
这类数据结构一般为
create table objecttable(id int primary key identity(1,1),userno varchar(10),calendar date,type varchar(20),num int)
目标输出数据结构
userno type num calendar
---------- ---------- -----------
userA 类别1 1 date1
userB 类别2 3 date2
userC 类别3 5 date3
select userno,max(num) maxnum,type,convert(varchar(7),calendar,120) monthly
into #
from objecttable group by userno,convert(varchar(7),calendar,120),type
select * from # pivot(max(maxnum) for type in(类别1,类别2,类别3)) x
userno monthly 类别1 类别2 类别3
-----------------------------------------------------------
userA 2016-06 10 11 15
userB 2016-06 6 3 8
userC 2016-06 9 2 7
附PIVOT语法
SELECT * FROM TB PIVOT(聚合函数(列) FOR 列 in (…) ) tt
UNPIVOT相反操作
select * into #rlst from # pivot(max(maxnum) for type in(类别1,类别2,类别3)) x
select userno,monthly,type,num from #rlst unpivot(num for type in([类别1],[类别2],[类别3]))xx
完整语法:
select f1,f2,typename,num fom tb
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)
PIVOT&UNPIVOT的更多相关文章
- SQL Server中行列转换 Pivot UnPivot
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- sql server 行转列 Pivot UnPivot
SQL Server中行列转换 Pivot UnPivot 本文转自:张志涛 原文地址: http://www.cnblogs.com/zhangzt/archive/2010/07/29/17878 ...
- sql server pivot/unpivot 行列互转
有时候会碰到行转列的需求(也就是将列的值作为列名称),通常我都是用 CASE END + 聚合函数来实现的. 如下: declare @t table (StudentName nvarchar(20 ...
- Ms sql pivot unpivot
--建表 create table dbo.orders ( orderid int not null primary key nonclustered, orderdate datetime not ...
- sql:pivot unpivot
pivot 行转列 unpivot 列转行 源码跑步起来 这是能跑起来的 源码转自 http://www.cnblogs.com/zhangzt/archive/2010/07/29/178782 ...
- 多列的行列转换(PIVOT,UNPIVOT)
形式1 形式2 形式3 有时候可能会有这样的需求: 将一张表的所有列名转做为数据的一列数据,将一列数据作为整张表的列名 当列比较多时,只用PIVOT是解决不了的,经过研究,需要将UNPIVOT 和 P ...
- SQL 行转列 列转行 PIVOT UNPIVOT
1.基础表 2.行转列,注意ISNULL函数的使用,在总成绩的统计中,ISNULL(-,0) 有必要使用 3.列转行,对列语文.数学.英语.政治,进行列转行,转为了2列,score scname 这两 ...
- SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)
SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...
- SQL Server中行列转换 Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQLServer 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列)FOR 列 in (-) )AS P 完 ...
随机推荐
- POJ1947 Rebuilding Roads(树形DP)
题目大概是给一棵树,问最少删几条边可以出现一个包含点数为p的连通块. 任何一个连通块都是某棵根属于连通块的子树的上面一部分,所以容易想到用树形DP解决: dp[u][k]表示以u为根的子树中,包含根的 ...
- Sql 字符串替换
(1) 字符串替换 Update SongADD_EMH0055 SET songno = REPLACE(songno, '231', '233') where songno like '%1022 ...
- object-c [self class] 和 [self _cmd]
[self class] 返回当前类名 [self _cmd] 返回当前方法名 self 是类的隐藏的参数,指向当前当前调用方法的类 另一个隐藏参数是_cmd,代表当前类方法的selector
- 【BZOJ】1090: [SCOI2003]字符串折叠(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1090 随便yy一下.. 设f[i,j]表示i-j的最小长度 f[i, j]=min{j-i+1, f ...
- Xshell选中的同时把内容复制到剪贴板(还可以设置设置文本分隔符)
1.设置对话框 工具 -> 选项 -> 键盘和鼠标 -> 将选定的文本自动复制到剪贴板 2.贴图如下 2.1.打开设置对话框 2.2.设置键盘鼠标,左键复制 2.3.右键粘贴 作者: ...
- python表达式
算术表达式: 地板除: >>> 10 // 3 3>>> 5 // 2 2>>> 5 // 31 取余: >>> 10 % 31 ...
- Bloomberg SEP 12.x 迁移小记
备份 个文件: D:\Program Files\Symantec\Symantec Endpoint Protection Manager\Server Private Key Backup ...
- Linux网桥设置
1. sudo apt-get install bridge-utils 2. brctl --help Usage: brctl [commands] commands: ad ...
- BZOJ 2120 数颜色(带修改的莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 3478 Solved: 1342 [Submit][Status][Discus ...
- js性能优化的小知识
避免全局查找 function search() { //当我要使用当前页面地址和主机域名 alert(window.location.href + window.location.host); } ...