使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UNPIVOT,则可以很容易的实现行列转换的需求. 在本文中我们将通过两个简单的例子详细讲解PIVOT和UNPIVOT的用法. PIVOT是行转列,用法如下: 假如表结构如下: id name quarter profile 1 a 1 10
所谓表旋转,就是将表的行转换为列,或是将表的列转换为行,这是从SQL Server 2005開始提供的新技术.因此,如果希望使用此功能,须要将数据库的兼容级别设置为90.表旋转在某些方面也是攻克了表的数据存储和实际须要之间的矛盾.比如.图9-4所看到的的是一个典型的产品销售统计表,这样的格式尽管便于阅读,可是在进行数据表存储的时候却并不easy管理,产品销售数据表通常须要设计成图9-5所看到的的结构. 这样就带来一个问题,用户既希望数据easy管理.又希望能够生成一种能够easy阅读的表格数据.
行专列 Pivot 1)SQL 2000版本 静态 SELECT ID , SUM(CASE Code WHEN 'Item1' THEN Value END) AS Item1 , SUM(CASE Code WHEN 'Item2' THEN Value END) AS Item2 , SUM(CASE Code WHEN 'Item3' THEN Value END) AS Item3 FROM RowToCol GROUP BY ID --或者用max也行 SELECT ID , MAX
今天在工作的时候遇到了行列转换的问题,记得去年有一段时间经常写,但是许久不用已经记不太得了.好记性不如烂笔头,忙完之后赶紧记录一下. 关键字:PIVOT(行转列),UNPIVOT(列转行) 先说说 PIVOT(行转列)这是我今天遇到的问题 PIVOT(行专列) 主要语法:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>)
记录一下:sql语句查找某一列的值得最大值. 1.例如我要查找 表A中a列的最大值: 查找语句可以这么写: "select Max(a) a from A" 2.查找表A中a列中包含字符串string的最大值,其实就是模糊找查找并取其中的最大值 : 其中字符串是变量,可以这么写:" select MAX(a) a from A where a like '%"+string+"%'"
行列转换常见场景 由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表). 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果. 表数据: ID Value 1 tiny,small,big 2 small,medium 3 tiny,big 期望得到结果: ID Value 1 tiny 1 small 1 big 2 small 2 medium 3 tiny 3 big 具体方法 先从一个具体实例开始我们的