如何在SQL中产生交叉式数据表(枢纽分析表)Part 2(PIVOT,UNPIVOT)

之前小喵使用SQL2000的时候,为了产生交叉数据表(Excel中称为枢纽分析表),小喵用了以下这篇的方式来处理

http://www.dotblogs.com.tw/topcat/archive/2008/04/14/2909.aspx

这样的方式在SQL 2005里面一样可以用,不过2005又新增了一个更方便的东西,可以更简洁的来处理。这个东西就是【PIVOT】,神奇的是,除了可以透过PIVOT产生交叉数据表,还可以透过UNPIVOT将交叉数据表转回原来的方式(这对于有些数据表的正规化很有帮助唷)。

^_^

相关的说明SQL2005的Online Book已经说得很清楚了,小喵就直接链接TechNet的文章,请大家参考

http://technet.microsoft.com/zh-tw/library/ms177410.aspx



以下是签名:

  • 欢迎转贴本站的文章,不过请在贴文主旨上加上【转贴】,并在文章中附上本篇的超链接与站名【topcat姗舞之间的极度凝聚】,感恩大家的配合。
  • 小喵大部分的文章会以小喵熟悉的语言VB.NET撰写,如果您需要C#的Code,也许您可以试着用线上的工具进行转换,这里提供几个参考
    • http://converter.telerik.com/
    • http://www.carlosag.net/tools/codetranslator/
    • http://www.developerfusion.com/tools/convert/vb-to-csharp/


Visual Studio and Development Technologies

(2005~Now)

topcat

Blog:http://www.dotblogs.com.tw/topcat

原文:大专栏  如何在SQL中产生交叉式数据表(枢纽分析表)Part 2(PIVOT,UNPIVOT)

原文地址:https://www.cnblogs.com/petewell/p/11518130.html

时间: 2024-08-09 03:19:43

如何在SQL中产生交叉式数据表(枢纽分析表)Part 2(PIVOT,UNPIVOT)的相关文章

在SQL 中生成JSON数据

这段时间接手一个数据操作记录的功能,刚拿到手上的时候打算用EF做,后来经过仔细考虑最后还是觉定放弃,最后思考再三决定: 1.以模块为单位分表.列固定(其实可以所有的操作记录都放到同一个表,但是考虑到数据量大的时候查询性能的问题还是分表吧)列:主键ID.引用记录主键ID.操作时间.操作类型.详细信息(里面存储的就是序列化后的值) 2.在客服端解析保存的序列化的值 但是用xml还是用json呢,这有是一个问题,显然用xml在存储过程正很容易就能生成了:SELECT * FROM TABLE FOR 

如何在SQL中处理层次型数据

最近在做公司的认证系统,看了开源项目如apache shiro跟spring security,还不知道是自己构建还是用上述代码.最近的考虑点是如何处理层次型数据,因为打算给user构造一个有层次的group,而且是n:m的,这篇文章虽然不能帮助我解决这个问题,但是作为一个基础文章,算是很扎实的了,所以自己翻译了一下. 原文链接 介绍 多数使用者都会与sql的层次型数据打一次或多次交道,并明确地领悟到层次型数据的处理并不是关系型数据库的目标.关系型数据库的表格不是层次型(例如xml),而是一个简

SQL中的高级数据操作

一.新增数据 1. 主键冲突:更新和替换 ① insert into 表名 [(字段列表)] values (值列表) on duplicate key update 字段 = 新值, 字段 = 值, ...; -- 更新 ② replace into 表名 [(字段列表)] values (值列表); -- 替换 2. 蠕虫复制 create table 表名A like 数据库.表名B; -- 从已有表中复制表结构(不复制数据), 如表B与表A在同一数据库,可活力数据库名; insert i

向mysql中批量插入数据的性能分析

MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下   CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VARCHAR( 50 ) NOT NULL,other_value VARCHAR( 50 ) NOT NULL) 通常情况下单条插入的sql语句我们会这么写: 代码如下   INSERT INTO example(example_id, name, valu

Sql中如何将数据表的两个字段的值如何互换?

今天遇到一个数据表的两个列数据要互换,在网上找到并记录下. 直接用Sql就可以搞定,语法如下 --将数据表中两个列数据互换的语法-- update tabName set field1=field2,field2=field1 我们来模拟验证一下,在数据库建立一个这样的表 第一步:创建数据表 --1.创建数据表-- create table Student( StuId int identity(1,1) primary key, StuCode varchar(50) not null, St

SQL中树形分层数据的查询优化

在数据查询中,从2008开始SQL Server提供了一个新的数据类型hierarchyid,专门用来操作层次型数据结构. hierarchyid  类型对层次结构树中有关单个节点的信息进行逻辑编码的方法是:对从树的根目录到该节点的路径进行编码. 这种路径在逻辑上表示为一个在根之后被访问的所有子级的节点标签序列. 表示形式以一条斜杠开头,只访问根的路径由单条斜杠表示. 对于根以下的各级,各标签编码为由点分隔的整数序列. 子级之间的比较就是按字典顺序比较由点分隔的整数序列. 每个级别后面紧跟着一个

(译)如何在sql中选取每一组的第一行/最后行/前几行

转载请注明: TheViper http://www.cnblogs.com/TheViper  部分翻译自How to select the first/least/max row per group in SQL 一些常见的sql问题有着类似的解决方法,比如:查找每个程序最近的日志,查找每个商品分类中最受欢迎的商品,查找每个玩家的玩出的前5高分...这些问题可以被归纳为从各组中选出Top N. fruits表 选取每个分类中价格最低的行 步骤:1.找到要求的所需的值price.2.填充其他字

如何在SharePoint2010中实现大数据存储(四步完成RBS解决方案)

第一步.开启数据库的FILESTREAM支持 实际环境为Sharepoint2010 和 SQL Server2008 R2:数据库默认安装的时候可能没有开启FILESTREAM,此时需要我们核实是否已经开启.打开SQL配置管理器,如下图所示 在开启FILESTREAM之后,在数据库中执行下列语句 EXEC sp_configure filestream_access_level, 2RECONFIGURE 第二.配置内容数据库与文件系统的映射 use [WSS_Content]if not e

sql中--行处理数据的两种方式

--创建待使用的表格CREATE TABLE Orders ( OrderID INT , CostValue DECIMAL(18, 2) );WITH cte_temp AS ( SELECT 1 AS OrderID UNION ALL SELECT OrderID + 1 FROM cte_temp WHERE OrderID < 10000 ) INSERT INTO Orders ( OrderID ) SELECT OrderID FROM cte_temp OPTION ( MA