2013年4月24日

SQL Server2005杂谈(5):将聚合记录集逆时针和顺时针旋转90度

摘要: 在输出统计结果时可能需要将列变成行,而将聚合结果(如count、sum)作为记录的第一行,先看如下的SQL语句:declare @t table(name varchar(20))insert @tselect 'abc' union allselect 'xxx' union allselect 'xxx' union allselect 'ttt'select * from @t 在执行上面的SQL语句后,会输出如图1所示的记录集。图1上图显示的是一个普通的记录集,如果要统计name字段的每个值的重复数,需要进行分组,如下面的 阅读全文

posted @ 2013-04-24 10:54 虾米a 阅读(157) 评论(0) 推荐(0)

SQL Server2005杂谈(4):在SQL Server2005中按列连接字符串的三种方法

摘要: 最近做一个项目,遇到一个在分组的情况下,将某一列的字段值(varchar类型)连接起来的问题,类似于sum函数对int型字段值求和。如有一个表t_table,结构和数据如图1 图1 其中要按着xh字段分组,并且将每一组name字段值连接起来。最终结果希望如图2所示 图2表中的th字段值对于每一个xh值是唯一的,也是有限的,也就是说,对于一个xh值,th的值不会太多,如最多是10个(从1至10)。以上需求最终想了三种方法来解决这个问题。一、修改表结构如果是新的项目,可以考虑修改一下表的结构。如果t_table的结构修改如下: xh value1value2value3 value4 .... . 阅读全文

posted @ 2013-04-24 10:47 虾米a 阅读(143) 评论(0) 推荐(0)

SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较

摘要: 排名函数是SQL Server2005新加的功能。在SQL Server2005中有如下四个排名函数:1.row_number2.rank3.dense_rank4.ntile 下面分别介绍一下这四个排名函数的功能及用法。在介绍之前假设有一个t_table表,表结构与表中的数据如图1所示:图1其中field1字段的类型是int,field2字段的类型是varchar一、row_number row_number函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号。row_number函数的用法如下面的SQL语句所示:select row_number() over(orde 阅读全文

posted @ 2013-04-24 10:38 虾米a 阅读(142) 评论(0) 推荐(0)

SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用

摘要: 转自:李宁的极客世界先看如下一个数据表(t_tree):上图显示了一个表中的数据,这个表有三个字段:id、node_name、parent_id。实际上,这个表中保存了一个树型结构,分三层:省、市、区。其中id表示当前省、市或区的id号、node_name表示名称、parent_id表示节点的父节点的id。现在有一个需求,要查询出某个省下面的所有市和区(查询结果包含省)。如果只使用SQL语句来实现,需要使用到游标、临时表等技术。但在SQL Server2005中还可以使用CTE来实现。从这个需求来看属于递归调用,也就是说先查出满足调价的省的记录,在本例子中的要查“辽宁省”的记录,如下:idno 阅读全文

posted @ 2013-04-24 10:31 虾米a 阅读(128) 评论(1) 推荐(0)

SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL

摘要: 转自:李宁的极客世界先看下面一个嵌套的查询语句:select * from person.StateProvince where CountryRegionCode in (select CountryRegionCode from person.CountryRegion where Name like 'C%')上面的查询语句使用了一个子查询。虽然这条SQL语句并不复杂,但如果嵌套的层次过多,会使SQL语句非常难以阅读和维护。因此,也可以使用表变量的方式来解决这个问题,SQL语句如下:declare @t table(CountryRegionCode nvarchar(. 阅读全文

posted @ 2013-04-24 10:17 虾米a 阅读(268) 评论(0) 推荐(1)

导航