SQL Server 2005之PIVOT/UNPIVOT行列转换(转)

SQL Server2005引入了很多迎合开发者口味的新特性,虽然改动不大,却大大了减少了开发者的工作量,这种替用户考虑的开发思路,值得称赞。

在SQL Server2000中,要实现行列转换,需要综合利用聚合函数和动态SQL,实现起来需要一定的技巧,所以在CSDN的SQL讨论区里可以看到大量询问行列转换如何实现的问题。到了2005中,使用新引进的关键字PIVOT/UNPIVOT,可以轻松实现行列转换的需求。

好像Oracle11g也准备引入PIVOT/UNPIVOT特性,对于Oracle开发来说,It's a good news。

本文通过两个简单的例子展示PIVOT/UNPIVOT的用法。详细的语法请参考联机帮助。

PIVOT

创建测试表,插入测试数据

create table test(id int,name varchar(20),quarter int,profile int)
insert into test values(1,'a',1,1000)
insert into test values(1,'a',2,2000)
insert into test values(1,'a',3,4000)
insert into test values(1,'a',4,5000)
insert into test values(2,'b',1,3000)
insert into test values(2,'b',2,3500)
insert into test values(2,'b',3,4200)
insert into test values(2,'b',4,5500)

select * from test
id name quarter profile
----------- -------------------- ----------- -----------
1 a 1 1000
1 a 2 2000
1 a 3 4000
1 a 4 5000
2 b 1 3000
2 b 2 3500
2 b 3 4200
2 b 4 5500

(8 row(s) affected)

利用PIVOT将个季度的利润转成横向显示:

select id,name,
[1] as "一季度",
[2] as "二季度",
[3] as "三季度",
[4] as "四季度"
from
test
pivot
(
sum(profile)
for quarter in
([1],[2],[3],[4])
)
as pvt

id name 一季度 二季度 三季度 四季度
----------- -------------------- ----------- ----------- ----------- -----------
1 a 1000 2000 4000 5000
2 b 3000 3500 4200 5500

(2 row(s) affected)

UNPIVOT

建立测试表,插入测试数据

drop table test

create table test(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)

insert into test values(1,'a',1000,2000,4000,5000)
insert into test values(2,'b',3000,3500,4200,5500)


select * from test

id name Q1 Q2 Q3 Q4
----------- -------------------- ----------- ----------- ----------- -----------
1 a 1000 2000 4000 5000
2 b 3000 3500 4200 5500

(2 row(s) affected)

利用UNPIVOT,将同一行中四个季度的列数据转换成四行数据:

select id,name,quarter,profile
from
test
unpivot
(
profile
for quarter in
([Q1],[Q2],[Q3],[Q4])
)
as unpvt

id name quarter profile
----------- -------------------- ---------- -----------
1 a Q1 1000
1 a Q2 2000
1 a Q3 4000
1 a Q4 5000
2 b Q1 3000
2 b Q2 3500
2 b Q3 4200
2 b Q4 5500

(8 row(s) affected)

转载于:https://www.cnblogs.com/Fskjb/archive/2010/04/03/1703867.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 188. 买卖股票的最佳时机 IV(动态规划)

1. 题目 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [2…

mysql slow log 分析工具_mysql slow log分析工具的比较

mysql 中的 slow log 是用来记录执行时间较长(超过 long_query_time 秒)的 sql 的一种日志工具。启用 slow log在 my.cnf 中设置[mysqld]slow_query_logonslow_query_log_filemysql-slow重启 MySQL 服务。五款常用工具mysqldumpslowmysqlslamyprofimysql-explain-slow-logmysql…

利用寄存器进入栈值交换

代码 varA, B: Word;beginA :1; B :2; asmmov ax, a //赋值 mov bx, b push ax //进栈 push bx pop ax //退栈 pop bx mov a, ax //利用栈先进后出, ax已退栈, 寄存器里的值为原bx 的值 mov b, bx //利用栈先进后出, bx已退栈, 寄存…

LeetCode 309. 最佳买卖股票时机含冷冻期(动态规划)

1. 题目 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再…

mysql new map_使用构造器模式动态构建Map作为mybatis的查询条件

Map filter mapper.convertValue(this,Map.class);System.out.printf("查询条件:%s\n", JSON.toJSONString(filter));returnfilter;}//https://stackoverflow.com/questions/6796187/java-introspection-object-to-map/57057596#57057596public MaptoFilter2(){Map …

处理Excel,填充空白区域

在企业应用开发中经常是业务人员提供Excel的数据源,而开发人员将Excel数据导入到数据库中,然后在数据库中进行处理。在Excel中为了表示一种层次和所属关系,很多时候会产生很多空白的单元格。比如一个CRM数据,里面有销售团队、销售…

LeetCode 901. 股票价格跨度(单调栈)

1. 题目 编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。 今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。 例如&#xff0c…

今天动手熟悉了一下css和php

手又痒了,动了动css和php,复习了已经忘了很久的csshttp://www.the520.cn/files/cssstudy/转载于:https://www.cnblogs.com/x2048/articles/1793996.html

Python核心教程(第二版)读书笔记(三)

第三章Python基础 2010-04-09 换行 一行过长的语句可以使用反斜杠‘\’分解成几行。有两种例外情况一个语句不使用反斜线也可以跨行。 1、在使用闭合操作符时,单一语句可以跨多行。例如:在含有小括号、中括号、花括号时可以多行书写。 2、三引号包括下的…

mysql没有写入权限_MySQL的权限系统

一、MySQL权限系统一)MySQL权限系统介绍权限系统的作用:授予来自某个主机的某个用户可以查询、插入、修改、删除等数据库操作的权限不能明确指定拒绝某个用户的连接权限控制(授权与回收)的执行语句包括create user,grant,revoke授权后的权限都…

LeetCode 1300. 转变数组后最接近目标值的数组和(二分查找)

1. 题目 给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value , 使得将数组中所有大于 value 的值变成 value 后,数组的和 最接近 target (最接近表示两者之差的绝对值最小)。 如果有多种使得和最接近…

AJAX 弹出窗消息类

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.IO;using System.Text;using System.Web.UI;namespace WebApplication{ /// <summary> /// 消息类 /// /// /// </summary> public class Me…

mysql 创建初始化帐号_MySQL创建SCOTT用户及初始化数据

表结构create table dept(-- 部门编号deptno int unsigned auto_increment primary key,-- 部门名称dname varchar(15) ,-- 部门所在位置loc varchar(50))engine InnoDB;create table emp(-- 雇员编号empno int unsigned auto_increment primary key,-- 雇员姓名ename varchar…

潜在语义分析(Latent Semantic Analysis,LSA)

文章目录1. 单词向量空间、话题向量空间1.1 单词向量空间1.2 话题向量空间2. 潜在语义分析算法2.1 例子3. 非负矩阵分解算法4. TruncatedSVD 潜在语义分析实践一种无监督学习方法&#xff0c;主要用于文本的话题分析其特点是通过矩阵分解发现文本与单词之间的基于话题的语义关系…

python分割提取字符串_Python 字符串操作(截取/替换/查找/分割)

python字符串连接先介绍下效率比较低的&#xff0c;有些新手朋友就会犯这个错误&#xff1a;a [a,b,c,d]content for i in a:content content iprint content说下为什么效率会低呢&#xff1f;原因&#xff1a;在循环连接字符串的时候&#xff0c;他每次连接一次&#xff0…

CURL详解[全]

PHP中的CURL函数库&#xff08;Client URL Library Function&#xff09;curl_close — 关闭一个curl会话curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数curl_errno — 返回一个包含当前会话错误信息的数字编号curl_error — 返回一个包含当前会话错误信息的字符串…

基于sklearn.decomposition.TruncatedSVD的潜在语义分析实践

文章目录1. sklearn.decomposition.TruncatedSVD2. sklearn.feature_extraction.text.TfidfVectorizer3. 代码实践4. 参考文献《统计学习方法》潜在语义分析&#xff08;Latent Semantic Analysis&#xff0c;LSA&#xff09; 笔记 1. sklearn.decomposition.TruncatedSVD sk…

一个简单又高效的日志系统

摘要&#xff1a;本文给出一个性能高&#xff0c;使用简单的日志解决方案。本模块实现日志信息的批量写入文件&#xff0c;定时自动flush到文件中&#xff0c;写入文件的日志级别可动态调整&#xff0c;单个日志文件大小可配置&#xff0c;循环对日志文件写入&#xff0c;这样不…

R语言chorolayer_R语言空间可视化:绘制英国脱欧投票地图

添加法国&#xff0c;它位于右下方&#xff0c;因此我们应该看到一点…plot(FR,addTRUE)然后&#xff0c;我们可以检索英国退欧公投数据referendumddply(referendum,.(Region,HASC_code),summarise,Remainsum(Remain),Leavesum(Leave))我们可以发现&#xff0c;脱欧赢得了51.89…

概率潜在语义分析(Probabilistic Latent Semantic Analysis,PLSA)

文章目录1. 概率潜在语义分析模型1.1 基本想法1.2 生成模型1.3 共现模型1.4 模型性质2. 概率潜在语义分析的算法概率潜在语义分析&#xff08;probabilistic latent semantic analysis&#xff0c;PLSA&#xff09;&#xff0c;也称概率潜在语义索引&#xff08;probabilistic …