<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_moss_tan_jun</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/65924/rss</id><updated>2012-04-23T13:46:56Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/65924/rss"/><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452886.html</id><title type="text">TTE</title><summary type="text">http://apps.hi.baidu.com/share/detail/37462037</summary><published>2012-04-16T15:09:00Z</published><updated>2012-04-16T15:09:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452886.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452886.html"/><content type="html">&lt;a href="http://apps.hi.baidu.com/share/detail/37462037"&gt;http://apps.hi.baidu.com/share/detail/37462037&lt;/a&gt;&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2452886.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452886.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452887.html</id><title type="text">TTwwww</title><summary type="text">http://apps.hi.baidu.com/share/detail/37462037</summary><published>2012-04-16T15:09:00Z</published><updated>2012-04-16T15:09:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452887.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452887.html"/><content type="html">&lt;a href="http://apps.hi.baidu.com/share/detail/37462037"&gt;http://apps.hi.baidu.com/share/detail/37462037&lt;/a&gt; &lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2452887.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452887.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452878.html</id><title type="text">ASP.NET三层架构应用总结</title><summary type="text">与ASP相比ASP.NET在Web应用开发上无疑更容易，更有效率。Web开发大部分还是围绕着数据操作，建立数据库存储数据，编写代码访问和修改数据，设计界面采集和呈现数据。走过Asp.net学习入门阶段后，真正开始着手开发一个Web项目时，才发现错综复杂的数据与关联根本就不是SqlDataSource和AccessDataSource数据源控件能简单解决的，而恰恰是被忽视了的一个ObjectDataSource数据源控件才是真正踏入开发门槛的关键，由此也对三层架构模式有了初步体验。一．ASP.NET三层架构介绍设计模式中的分层架构（可以参考一下J2EE中MVC模式）实现了各司其职，互不干涉，所以</summary><published>2012-04-16T15:02:00Z</published><updated>2012-04-16T15:02:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452878.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452878.html"/><content type="html">&lt;p&gt;与ASP相比ASP.NET在Web应用开发上无疑更容易，更有效率。Web开发大部分还是围绕着数据操作，建立数据库存储数据，编写代码访问和修改数据，设计界面采集和呈现数据。走过Asp.net学习入门阶段后，真正开始着手开发一个Web项目时，才发现错综复杂的数据与关联根本就不是SqlDataSource和AccessDataSource数据源控件能简单解决的，而恰恰是被忽视了的一个ObjectDataSource数据源控件才是真正踏入开发门槛的关键，由此也对三层架构模式有了初步体验。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一．ASP.NET三层架构介绍&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;设计模式中的分层架构（可以参考一下J2EE中MVC模式）实现了各司其职，互不干涉，所以如果一旦哪一层的需求发生了变化，就只需要更改相应的层中的代码而不会影响到其它层中的代码。这样就能更好的实现开发中的分工，有利于组件的重用。所以这些年关于模式的研究有很多成果，应用也很广泛。一个好的模式在程序开发和后期维护中作用重大。&lt;/p&gt;&lt;p&gt;ASP.NET三层架构自底向上分为：数据访问层（DAL），业务逻辑层（BLL）和表示层（PL）。&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;img class="blogimg" src="http://hiphotos.baidu.com/%B4%F3%CE%B0/pic/item/05e2cb171315d137c93d6daa.jpg" border="0" small="0"  alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;数据访问层（DAL）：使用了一个强类型的DataSet作为数据访问层，只是单纯的对数据进行增，删，改，查询和判断存在等等较通用的数据访问方法（由SQL语句来提供），不应该有&amp;#8220;事务&amp;#8221;存在。&lt;/p&gt;&lt;p&gt;业务逻辑层（BLL）：业务逻辑层是在数据访问层和表示层之间进行数据交换的桥梁，按业务需求调用数据访问层中的方法组合，集合了各种业务规则到一个BLL中，例如通过条件进行判断的数据操作或&amp;#8220;事务&amp;#8221;处理。BLL都是以类库（Class Library）的形式来实现的。&lt;/p&gt;&lt;p&gt;表示层（PL）：表示层是为客户提供用于交互的应用服务图形界面，帮助用户理解和高效地定位应用服务，呈现业务逻辑层中传递的数据，用ASP.NET页面来实现。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2452878.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452878.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452803.html</id><title type="text">public Line(string name): base(name)中，冒号后面是什么意思</title><summary type="text">public Line(string name)是Line类的构造函数,base(name)是其基类的构造函数。public Line(string name): base(name)指的是在Line的构造函数中调用其基类的带string类型参数的构造函数。因为在子类不能直接继承父类的构造函数，只能通过这种方式调用</summary><published>2012-04-16T14:24:00Z</published><updated>2012-04-16T14:24:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452803.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452803.html"/><content type="html">public Line(string name)是Line类的构造函数,base(name)是其基类的构造函数。&lt;br /&gt;public Line(string name): base(name)指的是在Line的构造函数中调用其基类的带string类型参数的构造函数。因为在子类不能直接继承父类的构造函数，只能通过这种方式调用&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2452803.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452803.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452758.html</id><title type="text">SQL行列转换，PIVOT与UNPIVOT的区别和使用方法举例</title><summary type="text">使用过SQL Server 2000的人都知道，要想实现行列转换,必须综合利用聚合函数和动态SQL，具体实现起来需要一定的技巧，而在SQL Server 2005中，使用新引进的关键字PIVOT/UNPIVOT，则可以很容易的实现行列转换的需求。 在本文中我们将通过两个简单的例子详细讲解PIVOT和UNPIVOT的用法。PIVOT是行转列，用法如下： 假如表结构如下： 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...</summary><published>2012-04-16T14:07:00Z</published><updated>2012-04-16T14:07:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452758.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452758.html"/><content type="html">&lt;p&gt;使用过SQL Server 2000的人都知道，要想实现行列转换,必须综合利用聚合函数和动态SQL，具体实现起来需要一定的技巧，而在SQL Server 2005中，使用新引进的关键字PIVOT/UNPIVOT，则可以很容易的实现行列转换的需求。 &lt;/p&gt;&lt;p&gt;在本文中我们将通过两个简单的例子详细讲解PIVOT和UNPIVOT的用法。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;PIVOT是行转列，用法如下： &lt;/strong&gt;&lt;br /&gt;假如表结构如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id&amp;nbsp; name quarter&amp;nbsp; profile&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; &amp;nbsp; a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;1000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 2000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;a&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;4000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;5000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;3000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 3500&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;4200&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 5500&lt;br /&gt;&amp;nbsp; ----------------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 使用PIVOT将四个季度的利润转换成横向显示:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select id,name,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] as "一季度",[2] as "二季度",[3] as "三季度",[4] as "四季度"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from test&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pivot&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sum(profile)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for quarter in ([1],[2],[3],[4])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; as pvt&lt;/p&gt;&lt;p&gt;&amp;nbsp;-----------------------------------------------&lt;br /&gt;&amp;nbsp;得出的结果如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; id&amp;nbsp; name&amp;nbsp; &amp;nbsp;一季度&amp;nbsp; 二季度 &amp;nbsp;三季度 &amp;nbsp;四季度&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000&amp;nbsp;&amp;nbsp; &amp;nbsp;2000&amp;nbsp;&amp;nbsp; &amp;nbsp; 4000&amp;nbsp;&amp;nbsp; &amp;nbsp; 5000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;3000&amp;nbsp;&amp;nbsp; &amp;nbsp;3500&amp;nbsp; &amp;nbsp;&amp;nbsp; 4200&amp;nbsp;&amp;nbsp; &amp;nbsp; 5500&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;========================================================================================&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;UNPIVOT是列转行，用法如下：&lt;/strong&gt;&lt;br /&gt;假如表结构如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; id&amp;nbsp;&amp;nbsp; name&amp;nbsp;&amp;nbsp; &amp;nbsp;Q1&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Q2&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Q3&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000&amp;nbsp;&amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp; 4000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 3000&amp;nbsp;&amp;nbsp; &amp;nbsp;3500&amp;nbsp;&amp;nbsp;&amp;nbsp; 4200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5500&lt;br /&gt;&amp;nbsp;-----------------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 使用UNPIVOT，将同一行中四个季度的列数据转换成四行数据：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select id,name,quarter,profile&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from test&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unpivot&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; profile&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for quarter in ([Q1],[Q2],[Q3],[Q4])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; as unpvt&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;-----------------------------------------------&lt;br /&gt;&amp;nbsp;得出的结果如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; id&amp;nbsp;&amp;nbsp; name&amp;nbsp;&amp;nbsp; quarter&amp;nbsp;&amp;nbsp;&amp;nbsp; profile&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 1000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Q2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;4000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;5000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 3000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Q2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;3500&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Q3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 4200&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 5500&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2452758.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452758.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452750.html</id><title type="text">使用 PIVOT 和 UNPIVOT</title><summary type="text">PIVOT 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。有关 PIVOT 语法的完整说明，请参阅 FROM (Transact-SQL)。以下是带批注的 PIVOT 语法。SELECT &lt;非透视的列&gt;,[第一个透视的列] AS &lt;列名称&gt;,[第二个透视的列] AS &lt;列名称&gt;,...[最后一个透视的列] AS &lt;列名称&gt;,FROM(&lt;生成数据的 SELECT 查询&gt;)AS &lt;源查询的别名&gt;PIVOT(&lt;聚合函数&gt;(&lt;要聚合的列&gt;)FOR[&lt;包含要</summary><published>2012-04-16T14:03:00Z</published><updated>2012-04-16T14:03:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452750.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452750.html"/><content type="html">&lt;p&gt;PIVOT 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。有关 PIVOT 语法的完整说明，请参阅 &lt;span&gt;&lt;a href="http://technet.microsoft.com/zh-cn/library/ms177634.aspx"&gt;FROM (Transact-SQL)&lt;/a&gt;&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;以下是带批注的 PIVOT 语法。&lt;/p&gt;&lt;p&gt;SELECT &amp;lt;非透视的列&amp;gt;,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[第一个透视的列] AS &amp;lt;列名称&amp;gt;,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[第二个透视的列] AS &amp;lt;列名称&amp;gt;,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[最后一个透视的列] AS &amp;lt;列名称&amp;gt;,&lt;/p&gt;&lt;p&gt;FROM&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&amp;lt;生成数据的 SELECT 查询&amp;gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AS &amp;lt;源查询的别名&amp;gt;&lt;/p&gt;&lt;p&gt;PIVOT&lt;/p&gt;&lt;p&gt;(&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;聚合函数&amp;gt;(&amp;lt;要聚合的列&amp;gt;)&lt;/p&gt;&lt;p&gt;FOR&lt;/p&gt;&lt;p&gt;[&amp;lt;包含要成为列标题的值的列&amp;gt;]&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN ( [第一个透视的列], [第二个透视的列],&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;... [最后一个透视的列])&lt;/p&gt;&lt;p&gt;) AS &amp;lt;透视表的别名&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;可选的 ORDER BY 子句&amp;gt;;&lt;/p&gt;&lt;div xmlns=""&gt;&lt;div class="LW_CollapsibleArea_TitleDiv"&gt;&lt;div&gt;&lt;a class="LW_CollapsibleArea_TitleAhref" title="折叠" href="http://www.cnblogs.com/moss_tan_jun/admin/javascript:void(0)"&gt;&lt;img class="cl_CollapsibleArea_expanding LW_CollapsibleArea_Img" src="http://i.technet.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif"  alt="" /&gt;&lt;span class="LW_CollapsibleArea_Title"&gt;简单 PIVOT 示例&lt;/span&gt;&lt;/a&gt; &lt;div class="LW_CollapsibleArea_HrDiv"&gt;&lt;hr class="LW_CollapsibleArea_Hr" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="sectionblock"&gt;&lt;a id="sectionToggle0" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;/a&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;下面的代码示例生成一个两列四行的表。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a title="复制到剪贴板。" style="display: block" href="http://www.cnblogs.com/moss_tan_jun/admin/javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_caa7c6d4-c8f1-4a33-9b30-b356a274889f');" name="CodeSnippetCopyLink"&gt;复制&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCode" id="CodeSnippetContainerCode_caa7c6d4-c8f1-4a33-9b30-b356a274889f" dir="ltr"&gt;&lt;div style="color: black"&gt;USE AdventureWorks2008R2 ;&lt;br/&gt;GO&lt;br/&gt;SELECT DaysToManufacture, AVG(StandardCost) AS AverageCost &lt;br/&gt;FROM Production.Product&lt;br/&gt;GROUP BY DaysToManufacture;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;下面是结果集： &lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;DaysToManufacture&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AverageCost&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5.0885&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;223.88&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;359.1082&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;949.4105&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;没有定义 &lt;span class="code"&gt;DaysToManufacture&lt;/span&gt; 为 3 的产品。&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;以下代码显示相同的结果，该结果经过透视以使 &lt;span class="code"&gt;DaysToManufacture&lt;/span&gt; 值成为列标题。提供一个列表示三 &lt;span class="code"&gt;[3]&lt;/span&gt; 天，即使结果为 &lt;span class="code"&gt;NULL&lt;/span&gt;。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a title="复制到剪贴板。" style="display: block" href="http://www.cnblogs.com/moss_tan_jun/admin/javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_d98c61ac-a4cc-4d14-8a7e-18a2fed97c91');" name="CodeSnippetCopyLink"&gt;复制&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCode" id="CodeSnippetContainerCode_d98c61ac-a4cc-4d14-8a7e-18a2fed97c91" dir="ltr"&gt;&lt;div style="color: black"&gt;-- Pivot table with one row and five columns&lt;br/&gt;SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, &lt;br/&gt;[0], [1], [2], [3], [4]&lt;br/&gt;FROM&lt;br/&gt;(SELECT DaysToManufacture, StandardCost &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM Production.Product) AS SourceTable&lt;br/&gt;PIVOT&lt;br/&gt;(&lt;br/&gt;AVG(StandardCost)&lt;br/&gt;FOR DaysToManufacture IN ([0], [1], [2], [3], [4])&lt;br/&gt;) AS PivotTable;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;下面是结果集： &lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;Cost_Sorted_By_Production_Days&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;AverageCost&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5.0885&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;223.88&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;359.1082&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;949.4105&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div xmlns=""&gt;&lt;div class="LW_CollapsibleArea_TitleDiv"&gt;&lt;div&gt;&lt;a class="LW_CollapsibleArea_TitleAhref" title="折叠" href="http://www.cnblogs.com/moss_tan_jun/admin/javascript:void(0)"&gt;&lt;img class="cl_CollapsibleArea_expanding LW_CollapsibleArea_Img" src="http://i.technet.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif"  alt="" /&gt;&lt;span class="LW_CollapsibleArea_Title"&gt;复杂 PIVOT 示例&lt;/span&gt;&lt;/a&gt; &lt;div class="LW_CollapsibleArea_HrDiv"&gt;&lt;hr class="LW_CollapsibleArea_Hr" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="sectionblock"&gt;&lt;a id="sectionToggle1" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;/a&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;可能会用到 &lt;span class="code"&gt;PIVOT&lt;/span&gt; 的常见情况是：需要生成交叉表格报表以汇总数据。例如，假设需要在 &lt;span class="code"&gt;AdventureWorks2008R2&lt;/span&gt; 示例数据库中查询 &lt;span class="code"&gt;PurchaseOrderHeader&lt;/span&gt; 表以确定由某些特定雇员所下的采购订单数。以下查询提供了此报表（按供应商排序）。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a title="复制到剪贴板。" style="display: block" href="http://www.cnblogs.com/moss_tan_jun/admin/javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_ea5249a5-5f84-4240-bda3-e33b3309b220');" name="CodeSnippetCopyLink"&gt;复制&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCode" id="CodeSnippetContainerCode_ea5249a5-5f84-4240-bda3-e33b3309b220" dir="ltr"&gt;&lt;div style="color: black"&gt;USE AdventureWorks2008R2;&lt;br/&gt;GO&lt;br/&gt;SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5&lt;br/&gt;FROM &lt;br/&gt;(SELECT PurchaseOrderID, EmployeeID, VendorID&lt;br/&gt;FROM Purchasing.PurchaseOrderHeader) p&lt;br/&gt;PIVOT&lt;br/&gt;(&lt;br/&gt;COUNT (PurchaseOrderID)&lt;br/&gt;FOR EmployeeID IN&lt;br/&gt;( [250], [251], [256], [257], [260] )&lt;br/&gt;) AS pvt&lt;br/&gt;ORDER BY pvt.VendorID;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;以下为部分结果集。&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;VendorID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp5&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1492&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1494&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1496&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1498&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1500&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;将在 &lt;span class="code"&gt;EmployeeID&lt;/span&gt; 列上透视此嵌套 select 语句返回的结果。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a title="复制到剪贴板。" style="display: block" href="http://www.cnblogs.com/moss_tan_jun/admin/javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_56a4faed-afdc-40e7-9787-6e600231170a');" name="CodeSnippetCopyLink"&gt;复制&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCode" id="CodeSnippetContainerCode_56a4faed-afdc-40e7-9787-6e600231170a" dir="ltr"&gt;&lt;div style="color: black"&gt;SELECT PurchaseOrderID, EmployeeID, VendorID&lt;br/&gt;FROM PurchaseOrderHeader;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;这意味着 &lt;span class="code"&gt;EmployeeID&lt;/span&gt; 列返回的唯一值自行变成了最终结果集中的字段。因此，在透视子句中指定的每个 &lt;span class="code"&gt;EmployeeID&lt;/span&gt; 号都有相应的一列：在本例中为雇员 &lt;span class="code"&gt;164&lt;/span&gt;、&lt;span class="code"&gt;198&lt;/span&gt;、&lt;span class="code"&gt;223&lt;/span&gt;、&lt;span class="code"&gt;231&lt;/span&gt; 和 &lt;span class="code"&gt;233&lt;/span&gt;。&lt;span class="code"&gt;PurchaseOrderID&lt;/span&gt; 列作为值列，将根据此列对最终输出中返回的列（称为分组列）进行分组。在本例中，通过 &lt;span class="code"&gt;COUNT&lt;/span&gt; 函数聚合分组列。请注意，将显示一条警告消息，指出为每个雇员计算 &lt;span class="code"&gt;COUNT&lt;/span&gt; 时未考虑显示在 &lt;span class="code"&gt;PurchaseOrderID&lt;/span&gt; 列中的任何空值。&lt;/p&gt;&lt;div class="alert" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;img class="cl_IC46226" id="alert_caution" title="重要说明" alt="重要说明" src="http://i.technet.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" xmlns="" /&gt;&lt;strong&gt;重要提示&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;如果聚合函数与 PIVOT 一起使用，则计算聚合时将不考虑出现在值列中的任何空值。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;UNPIVOT 将与 PIVOT 执行几乎完全相反的操作，将列转换为行。假设以上示例中生成的表在数据库中存储为 &lt;span class="code"&gt;pvt&lt;/span&gt;，并且您需要将列标识符 &lt;span class="code"&gt;Emp1&lt;/span&gt;、&lt;span class="code"&gt;Emp2&lt;/span&gt;、&lt;span class="code"&gt;Emp3&lt;/span&gt;、&lt;span class="code"&gt;Emp4&lt;/span&gt; 和 &lt;span class="code"&gt;Emp5&lt;/span&gt; 旋转为对应于特定供应商的行值。这意味着必须标识另外两个列。包含要旋转的列值（&lt;span class="code"&gt;Emp1&lt;/span&gt;、&lt;span class="code"&gt;Emp2&lt;/span&gt;...）的列将被称为 &lt;span class="code"&gt;Employee&lt;/span&gt;，将保存当前位于待旋转列下的值的列被称为 &lt;span class="code"&gt;Orders&lt;/span&gt;。这些列分别对应于 Transact-SQL 定义中的 &lt;span class="parameter"&gt;pivot_column&lt;/span&gt; 和 &lt;span class="parameter"&gt;value_column&lt;/span&gt;。以下为该查询。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a title="复制到剪贴板。" style="display: block" href="http://www.cnblogs.com/moss_tan_jun/admin/javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_be7fedfe-9306-4b79-8f81-dd283ec01d10');" name="CodeSnippetCopyLink"&gt;复制&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCode" id="CodeSnippetContainerCode_be7fedfe-9306-4b79-8f81-dd283ec01d10" dir="ltr"&gt;&lt;div style="color: black"&gt;--Create the table and insert values as portrayed in the previous example.&lt;br/&gt;CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,&lt;br/&gt;    Emp3 int, Emp4 int, Emp5 int);&lt;br/&gt;GO&lt;br/&gt;INSERT INTO pvt VALUES (1,4,3,5,4,4);&lt;br/&gt;INSERT INTO pvt VALUES (2,4,1,5,5,5);&lt;br/&gt;INSERT INTO pvt VALUES (3,4,3,5,4,4);&lt;br/&gt;INSERT INTO pvt VALUES (4,4,2,5,5,4);&lt;br/&gt;INSERT INTO pvt VALUES (5,5,1,5,5,5);&lt;br/&gt;GO&lt;br/&gt;--Unpivot the table.&lt;br/&gt;SELECT VendorID, Employee, Orders&lt;br/&gt;FROM &lt;br/&gt;   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5&lt;br/&gt;   FROM pvt) p&lt;br/&gt;UNPIVOT&lt;br/&gt;   (Orders FOR Employee IN &lt;br/&gt;      (Emp1, Emp2, Emp3, Emp4, Emp5)&lt;br/&gt;)AS unpvt;&lt;br/&gt;GO&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;以下为部分结果集。&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;VendorID Employee Orders&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;---------- ---------- ------&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Emp5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;...&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;请注意，UNPIVOT 并不完全是 PIVOT 的逆操作。PIVOT 会执行一次聚合，从而将多个可能的行合并为输出中的单个行。而 UNPIVOT 不会重现原始表值表达式的结果，因为行已经被合并了。另外，UNPIVOT 的输入中的空值不会显示在输出中，而在执行 PIVOT 操作之前，输入中可能有原始的空值。&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;AdventureWorks2008R2 示例数据库中的 Sales.vSalesPersonSalesByFiscalYears 视图将使用 PIVOT 返回每个销售人员在每个会计年度的总销售额。若要在 SQL Server Management Studio 中编写视图脚本，请在&lt;span class="label"&gt;&amp;#8220;对象资源管理器&amp;#8221;&lt;/span&gt;中，在&lt;span class="label"&gt;&amp;#8220;视图&amp;#8221;&lt;/span&gt;文件夹下找到 AdventureWorks2008R2 数据库对应的视图。右键单击该视图名称，再选择&lt;span class="label"&gt;&amp;#8220;编写视图脚本为&amp;#8221;&lt;/span&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div xmlns=""&gt;&lt;div class="LW_CollapsibleArea_TitleDiv"&gt;&lt;div&gt;&lt;a class="LW_CollapsibleArea_TitleAhref" title="折叠" href="http://www.cnblogs.com/moss_tan_jun/admin/javascript:void(0)"&gt;&lt;img class="cl_CollapsibleArea_expanding LW_CollapsibleArea_Img" src="http://i.technet.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif"  alt="" /&gt;&lt;span class="LW_CollapsibleArea_Title"&gt;请参阅&lt;/span&gt;&lt;/a&gt; &lt;div class="LW_CollapsibleArea_HrDiv"&gt;&lt;hr class="LW_CollapsibleArea_Hr" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2452750.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452750.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452724.html</id><title type="text">数据库 行列相互转化</title><summary type="text">--行列互转/******************************************************************************************************************************************************以学生成绩为例子，比较形象易懂整理人：中国风(Roy)日期:2008.06.06*******************************************************************************************************</summary><published>2012-04-16T13:53:00Z</published><updated>2012-04-16T13:53:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452724.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452724.html"/><content type="html">--行列互转/******************************************************************************************************************************************************以学生成绩为例子，比较形象易懂&amp;nbsp;整理人：中国风(Roy)&amp;nbsp;日期:2008.06.06******************************************************************************************************************************************************/&amp;nbsp;--1、行互列--&amp;gt; --&amp;gt; (Roy)生成測試數據 if not object_id('Class') is null&amp;nbsp;&amp;nbsp;&amp;nbsp; drop table ClassGoCreate table Class([Student] nvarchar(&lt;strong&gt;2&lt;/strong&gt;),[Course] nvarchar(&lt;strong&gt;2&lt;/strong&gt;),[Score] int)Insert Classselect N'张三',N'语文',&lt;strong&gt;78&lt;/strong&gt; union allselect N'张三',N'数学',&lt;strong&gt;87&lt;/strong&gt; union allselect N'张三',N'英语',&lt;strong&gt;82&lt;/strong&gt; union allselect N'张三',N'物理',&lt;strong&gt;90&lt;/strong&gt; union allselect N'李四',N'语文',&lt;strong&gt;65&lt;/strong&gt; union allselect N'李四',N'数学',&lt;strong&gt;77&lt;/strong&gt; union allselect N'李四',N'英语',&lt;strong&gt;65&lt;/strong&gt; union allselect N'李四',N'物理',&lt;strong&gt;85&lt;/strong&gt; Go--2000方法:动态:&amp;nbsp;declare @s nvarchar(&lt;strong&gt;4000&lt;/strong&gt;)set @s=''Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'from Class group by[Course]exec('select [Student]'+@s+' from Class group by [Student]')&amp;nbsp;&amp;nbsp;生成静态:&amp;nbsp;select &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Student],&amp;nbsp;&amp;nbsp;&amp;nbsp; [数学]=max(case when [Course]='数学' then [Score] else &lt;strong&gt;0&lt;/strong&gt; end),&amp;nbsp;&amp;nbsp;&amp;nbsp; [物理]=max(case when [Course]='物理' then [Score] else &lt;strong&gt;0&lt;/strong&gt; end),&amp;nbsp;&amp;nbsp;&amp;nbsp; [英语]=max(case when [Course]='英语' then [Score] else &lt;strong&gt;0&lt;/strong&gt; end),&amp;nbsp;&amp;nbsp;&amp;nbsp; [语文]=max(case when [Course]='语文' then [Score] else &lt;strong&gt;0&lt;/strong&gt; end) from &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Class group by [Student]&amp;nbsp;GO动态:&amp;nbsp;declare @s nvarchar(&lt;strong&gt;4000&lt;/strong&gt;)Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @s=isnull(@s+',','')+quotename([Course]) from Class group by[Course]exec('select * from Class pivot (max([Score]) for [Course] in('+@s+'))b')&amp;nbsp;生成静态:select * from &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Class pivot &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b&amp;nbsp;生成格式:/*Student 数学&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 物理&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;英语&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 语文------- ----------- ----------- ----------- -----------李四&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 77&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 85&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 65&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 65张三&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 87&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 90&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 82&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 78&amp;nbsp;(2 行受影响)*/&amp;nbsp;------------------------------------------------------------------------------------------go--加上总成绩(学科平均分)&amp;nbsp;--2000方法:动态:&amp;nbsp;declare @s nvarchar(&lt;strong&gt;4000&lt;/strong&gt;)set @s=''Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'from Class group by[Course]exec('select [Student]'+@s+',[总成绩]=sum([Score])&amp;nbsp; from Class group by [Student]')--加多一列(学科平均分用avg([Score]))&amp;nbsp;生成动态:&amp;nbsp;select &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Student],&amp;nbsp;&amp;nbsp;&amp;nbsp; [数学]=max(case when [Course]='数学' then [Score] else &lt;strong&gt;0&lt;/strong&gt; end), &amp;nbsp;&amp;nbsp;&amp;nbsp;[物理]=max(case when [Course]='物理' then [Score] else &lt;strong&gt;0&lt;/strong&gt; end),&amp;nbsp;&amp;nbsp;&amp;nbsp; [英语]=max(case when [Course]='英语' then [Score] else &lt;strong&gt;0&lt;/strong&gt; end),&amp;nbsp;&amp;nbsp;&amp;nbsp; [语文]=max(case when [Course]='语文' then [Score] else &lt;strong&gt;0&lt;/strong&gt; end),&amp;nbsp;&amp;nbsp;&amp;nbsp; [总成绩]=sum([Score]) --加多一列(学科平均分用avg([Score]))from &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Class group by [Student]&amp;nbsp;go&amp;nbsp;--2005方法:&amp;nbsp;动态:&amp;nbsp;declare @s nvarchar(&lt;strong&gt;4000&lt;/strong&gt;)Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @s=isnull(@s+',','')+quotename([Course]) from Class group by[Course] --isnull(@s+',','') 去掉字符串@s中第一个逗号exec('select [Student],'+@s+',[总成绩] from (select *,[总成绩]=sum([Score])over(partition by [Student]) from Class) a pivot (max([Score]) for [Course] in('+@s+'))b ')&amp;nbsp;生成静态:&amp;nbsp;select &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Student],[数学],[物理],[英语],[语文],[总成绩] from &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(select *,[总成绩]=sum([Score])over(partition by [Student]) from Class) a --平均分时用avg([Score])pivot &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b &amp;nbsp;生成格式:&amp;nbsp;/*Student 数学&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 物理&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 英语&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 语文&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 总成绩------- ----------- ----------- ----------- ----------- -----------李四&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 77&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;85&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 65&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 65&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 292张三&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 87&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 90&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 82&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 78&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 337&amp;nbsp;(2 行受影响)*/&amp;nbsp;go&amp;nbsp;--2、列转行--&amp;gt; --&amp;gt; (Roy)生成測試數據 if not object_id('Class') is null&amp;nbsp;&amp;nbsp;&amp;nbsp; drop table ClassGoCreate table Class([Student] nvarchar(&lt;strong&gt;2&lt;/strong&gt;),[数学] int,[物理] int,[英语] int,[语文] int)Insert Classselect N'李四',&lt;strong&gt;77&lt;/strong&gt;,&lt;strong&gt;85&lt;/strong&gt;,&lt;strong&gt;65&lt;/strong&gt;,&lt;strong&gt;65&lt;/strong&gt; union allselect N'张三',&lt;strong&gt;87&lt;/strong&gt;,&lt;strong&gt;90&lt;/strong&gt;,&lt;strong&gt;82&lt;/strong&gt;,&lt;strong&gt;78&lt;/strong&gt;Go&amp;nbsp;--2000:&amp;nbsp;动态:&amp;nbsp;declare @s nvarchar(&lt;strong&gt;4000&lt;/strong&gt;)select @s=isnull(@s+' union all ','')+'select [Student],[Course]='+quotename(Name,'''')--isnull(@s+' union all ','') 去掉字符串@s中第一个union all+',[Score]='+quotename(Name)+' from Class'from syscolumns where ID=object_id('Class') and Name not in('Student')--排除不转换的列order by Colidexec('select * from ('+@s+')t order by [Student],[Course]')--增加一个排序&amp;nbsp;生成静态:select * from (select [Student],[Course]='数学',[Score]=[数学] from Class union all select [Student],[Course]='物理',[Score]=[物理] from Class union all select [Student],[Course]='英语',[Score]=[英语] from Class union all select [Student],[Course]='语文',[Score]=[语文] from Class)t order by [Student],[Course]&amp;nbsp;go--2005:&amp;nbsp;动态:&amp;nbsp;declare @s nvarchar(&lt;strong&gt;4000&lt;/strong&gt;)select @s=isnull(@s+',','')+quotename(Name)from syscolumns where ID=object_id('Class') and Name not in('Student') order by Colidexec('select Student,[Course],[Score] from Class unpivot ([Score] for [Course] in('+@s+'))b')&amp;nbsp;goselect &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Student,[Course],[Score] from &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Class unpivot &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;([Score] for [Course] in([数学],[物理],[英语],[语文]))b&amp;nbsp;生成格式:/*Student Course Score------- ------- -----------李四&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 数学&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 77李四&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 物理&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 85李四&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 英语&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 65李四&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 语文&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 65张三&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 数学&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 87张三&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 物理&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 90张三&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 英语&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 82张三&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 语文&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 78&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2452724.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452724.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452712.html</id><title type="text">关于quotename的用法</title><summary type="text">首先，sqlserver里的标识符有一定的规则，比如 你 create table abc 123(...) 那么中间含有空格，它不是符合规则的。 你会写做 create table [abc 123](....) 即以[]来定界标识符。quotename将 字串成为有效的标识符。 它有什么用呢？ 我举个例子：你有个表名字叫做 aa[]bb 当某些应用动态语句查询时 你如何写呢 exec('select * from aa[]bb') ？Xset @sql='select * from ' + quotename('aa[]bb') exec(@</summary><published>2012-04-16T13:47:00Z</published><updated>2012-04-16T13:47:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452712.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452712.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;首先，sqlserver里的标识符有一定的规则，比如&amp;nbsp; 你 &lt;br /&gt;create table abc 123(...) &lt;br /&gt;那么中间含有空格，它不是符合规则的。 &lt;br /&gt;&lt;br /&gt;你会写做 create table [abc 123](....) &lt;br /&gt;即以[]来定界标识符。&lt;br /&gt;&lt;br /&gt;quotename将 字串成为有效的标识符。 &lt;br /&gt;&lt;br /&gt;它有什么用呢？ 我举个例子：&lt;/p&gt;&lt;p&gt;&lt;br /&gt;你有个表名字叫做 aa[]bb &lt;br /&gt;&lt;br /&gt;当某些应用动态语句查询时 你如何写呢 &lt;br /&gt;exec('select * from aa[]bb') ？X&lt;br /&gt;&lt;br /&gt;set @sql='select * from ' + quotename('aa[]bb') &lt;br /&gt;exec(@sql) &lt;br /&gt;&lt;br /&gt;当然你也可以直接写出转义的写法 &lt;br /&gt;&lt;br /&gt;select * from [aa[]]bb] &lt;br /&gt;&lt;br /&gt;也就是说，quotename 使函数中的输入成为一个有效的标识符。 &lt;br /&gt;比如上例中 aa[]bb 不是一个有效的标识符。&lt;/p&gt;&lt;p&gt;还有一点就是quotename函数有几种写法： &lt;br /&gt;&amp;nbsp; quotename('aa') 生成的有效的标识符为 [aa] &lt;br /&gt;&amp;nbsp; quotename('aa','') 生成的有效的标识符为 [aa] &lt;br /&gt;&amp;nbsp; quotename('aa','''') 生成的有效的标识符为 'aa'&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;解释2：&lt;/p&gt;&lt;p&gt;简单来说吧&lt;br /&gt;比如你有一个表，名字叫 &lt;span style="color: #0000ff"&gt;index&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;你有一个动态查询，参数是表名&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;declare&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;varchar&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000"&gt;256&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;index&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;-查这个表里的数据：&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;select * from &lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #808080"&gt;+&lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;exec&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;select * from &lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #808080"&gt;+&lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;这样print出来的数据是&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;select&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;from&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;index&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;因为index是字键字，肯定出错，加上括号就可以了：&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;select&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;from&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000"&gt;index&lt;/span&gt;&lt;span style="color: #ff0000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;这便有了QUOTENAME，即：&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;select * from &lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #808080"&gt;+&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;结果：select * from [index]&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;exec&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;select * from &lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #808080"&gt;+&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;script type="text/javascript"&gt;if ($ != jQuery) {$ = jQuery.noConflict();}var isLogined = false;var cb_blogId = 45241;var cb_entryId = 1312786;var cb_blogApp = "smfish007bin";var cb_blogUserGuid = "8cf7460b-63cf-dd11-9e4d-001cf0cd104b";var cb_entryCreatedDate = '2008/10/16 16:46:00';&lt;/script&gt;&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2452712.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452712.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/13/2445881.html</id><title type="text">TT</title><summary type="text">SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@pp1", item.OrderNum), new SqlParameter("@pp2", item.OrderItemNum), };</summary><published>2012-04-13T07:33:00Z</published><updated>2012-04-13T07:33:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/13/2445881.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/13/2445881.html"/><content type="html">&amp;nbsp;SqlParameter[] parameters = new SqlParameter[]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new SqlParameter("@pp1", item.OrderNum),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new SqlParameter("@pp2", item.OrderItemNum),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2445881.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/13/2445881.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/13/2445557.html</id><title type="text">C#中,Dictionary的使用方法</title><summary type="text">在C#中,Dictionary提供快速的基于兼职的元素查找。当你有很多元素的时候可以使用它。它包含在System.Collections.Generic名空间中。在使用前，你必须声明它的键类型和值类型。详细说明必须包含名空间System.Collection.Generic Dictionary里面的每一个元素都是一个键值对(由二个元素组成：键和值) 键必须是唯一的,而值不需要唯一的 键和值都可以是任何类型(比如：string, int, 自定义类型，等等) 通过一个键读取一个值的时间是接近O(1) 键值对之间的偏序可以不定义 创建和初始化一个Dictionary对象Dictionary my</summary><published>2012-04-13T04:06:00Z</published><updated>2012-04-13T04:06:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/13/2445557.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/13/2445557.html"/><content type="html">&lt;div class="article_content" id="article_content"&gt;&lt;p&gt;在C#中,Dictionary提供快速的基于兼职的元素查找。当你有很多元素的时候可以使用它。它包含在System.Collections.Generic名空间中。&lt;/p&gt;&lt;p&gt;在使用前，你必须声明它的键类型和值类型。&lt;/p&gt;&lt;p&gt;详细说明&lt;br /&gt;必须包含名空间System.Collection.Generic &lt;br /&gt;Dictionary里面的每一个元素都是一个键值对(由二个元素组成：键和值) &lt;br /&gt;键必须是唯一的,而值不需要唯一的 &lt;br /&gt;键和值都可以是任何类型(比如：string, int, 自定义类型，等等) &lt;br /&gt;通过一个键读取一个值的时间是接近O(1) &lt;br /&gt;键值对之间的偏序可以不定义 &lt;br /&gt;创建和初始化一个Dictionary对象&lt;br /&gt;Dictionary myDictionary = new Dictionary(); &lt;br /&gt;添加键&lt;br /&gt;static void Main(string[] args) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp; Dictionary d = new Dictionary(); &lt;br /&gt;&amp;nbsp; d.Add("C#", 2); &lt;br /&gt;&amp;nbsp; d.Add("C", 0); &lt;br /&gt;&amp;nbsp; d.Add("C++", -1); &lt;br /&gt;} &lt;br /&gt;查找键&lt;br /&gt;static void Main(string[] args) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp; Dictionary d = new Dictionary(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Add("C#", 2); &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Add("VB", 1); &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Add("C", 0); &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Add("C++", -1); &lt;br /&gt;&amp;nbsp;&amp;nbsp; if (d.ContainsKey("VB")) // True &lt;br /&gt;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int p = d["VB"]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(p); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (d.ContainsKey("C")) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int p1 = d["C"]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(p1); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;删除元素&lt;br /&gt;static void Main(string[] args) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp; Dictionary d = new Dictionary(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Add("C#", 2); &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Add("VB", 1); &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Add("C", 0); &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Add("C++", -1); &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Remove("C");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Remove("VB"); &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;使用ContainsValue查找值的存在&lt;br /&gt;static void Main(string[] args) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dictionary d = new Dictionary(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.Add("C#", 2); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.Add("VB", 1); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.Add("C", 0); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.Add("C++", -1); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (d.ContainsValue(1)) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("VB"); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (d.ContainsValue(2)) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("C#"); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (d.ContainsValue(0)) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("C"); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (d.ContainsValue(-1)) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("C++"); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;} &lt;br /&gt;KeyNotFoundException&lt;br /&gt;如果你尝试读取字典中一个不存在的键，那么你会得到一个KeyNotFoundException。所有在读取一个键之前，你必须先使用ContainKey来核对键是否存在字典中。&lt;/p&gt;&lt;p&gt;基于int键的Dictionary&lt;br /&gt;static void Main(string[] args) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp; Dictionary d = new Dictionary(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Add(1000, "Planet"); &lt;br /&gt;&amp;nbsp;&amp;nbsp; d.Add(2000, "Stars"); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // lookup the int in the dictionary. &lt;br /&gt;&amp;nbsp;&amp;nbsp; if (d.ContainsKey(1000)) &lt;br /&gt;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(true); &lt;br /&gt;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadLine(); &lt;br /&gt;} &lt;br /&gt;排序字典SortedDictionary&lt;br /&gt;在排序字典中，当添加元素时字典必须进行排序，所以插入的速度会比较慢点。但是因为元素是有序存储的，所以元素的查找可以使用二分搜索等一些效率更高的搜索。&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2445557.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/13/2445557.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
