SQL Server 2005中的T-SQL(二)

日期: 2008-07-08 作者:Jeremy Kadlec 来源:TechTarget中国 英文

通过PIVOT 和UNPIVOT将行转换为列   一位在保健公司上班的开发人员每当她的报告用户想要将行转换为列的时候,抱怨不止。这并不是一次良好的会话。她不得不编写一些需要执行好多个CPU周期的复杂的代码来给用户提供他们想要的数据,对这些数据的要求是在正式报告需求基础之上产生的。这些痛苦的会话在SQL Server 2005引入PIVOT和UNPIVOT命令之前是常见的事。

这两个命令可以在几乎不需要修改代码的情况下快速地将行转换为列或者由列转换为行。    USE AdventureWorks;   GO   select VendorID, [164]……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

通过PIVOT 和UNPIVOT将行转换为列

  一位在保健公司上班的开发人员每当她的报告用户想要将行转换为列的时候,抱怨不止。这并不是一次良好的会话。她不得不编写一些需要执行好多个CPU周期的复杂的代码来给用户提供他们想要的数据,对这些数据的要求是在正式报告需求基础之上产生的。这些痛苦的会话在SQL Server 2005引入PIVOT和UNPIVOT命令之前是常见的事。这两个命令可以在几乎不需要修改代码的情况下快速地将行转换为列或者由列转换为行。

 

 USE AdventureWorks;
  GO
  select VendorID, [164] AS Emp1, [198] AS Emp2, [223] AS Emp3, [231] AS Emp4, [233] AS Emp5
  FROM
  (select PurchaseOrderID, EmployeeID, VendorID
  FROM Purchasing.PurchaseOrderHeader) p
  PIVOT
  (
  count (PurchaseOrderID)
  FOR EmployeeID IN
  ( [164], [198], [223], [231], [233] )
  ) AS pvt
  ORDER BY VendorID
 
  资源: 使用 PIVOT 和UNPIVOT, SQL Server 2005 在线书籍:ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/24ba54fc-98f7-4d35-8881-b5158aac1d66.htm

  改进的XML

  XML普遍应用在通过许多异构的环境进行数据传输和在许多微软的应用程序之间传输数据上;SQL Server 2005 XML特性改善了创建、存储、传输和查询XML数据的内在能力。现在可以在SQL Server中自然地完成如下:

  创建一个可以被表的某列引用的XML计划

  create XML SCHEMA COLLECTION [ . ]sql_identifier AS Expression

  为一个表创建一个本地的数据类型,这个表在创建的时候具有指向XML计划集合的指针,同时这个表放在与基本表不同的数据页上,就像SQL Server 2000中的BLOB。


 create TABLE Orders
  (OrderID int PRIMARY KEY NOT NULL,
  OrderDetailsID int NOT NULL,
  OrderDate datetime NOT NULL,
  …
  XMLOrder xml NOT NULL)
 
  为存储过程或者特别的事务创建一个变量作为XML数据类型

  DECLARE @OrdersSchema xml

  …

  create XML SCHEMA COLLECTION OrdersSchema AS @OrdersSchema

  通过创建主要和第二索引来提高对XML数据访问的速度


create PRIMARY XML INDEX PXML_Orders_OrderID
  ON OrdersSchema.Orders (OrderID);
  GO
  create XML INDEX SXML_Order_OrderDetailsID
  ON OrdersSchema.Orders (OrderDetailsID)
  USING XML INDEX PXML_Orders_OrderID FOR PATH ;
  GO

  通过一个简单的select语句来查询XML数据,将XML作为结果集的一部分,与表中余下的字段一起返回。 


select *
  FROM Orders
  where OrderID = 123

  结论

  SQL Server 2005中的T-SQL通过扩展传统关系型数据库管理系统获得了长足的进步。以上描述的各项只是冰山一角,T-SQL还有其他方面的提高,检查DTS——现在是SQL Server集成服务,分析服务,报告服务等。这些都是有挑战性的,然而令人兴奋的是,了解SQL Server所有这些新功能的日子不远了。

相关推荐