SqlServer:PIVOT操作

我们在数据库操作的时候,记录是按照行存储的,但是要是按列的方式存储的话,我们在反转成行的时候就会有点麻烦,在SqlServer2000的时候,我们可以用Case语句,虽然可以实现,但是如果字段比较多的话,sql语句的好长,维护起来也比较麻烦,幸好在SqlServer2005版本之上(含2005),我们有一个PIVOT操作,写起来也比较简单,废话不多说,直接上列子比较好,首先先看反转之前的数据如图:
poivt

这个一个用户的所有字段(UserID标识用户ID),我们要把他变成一行记录,就要用Poivt操作:

 

SELECT	[ID] AS UserID, [UifUser], [UifName],UifEml, [UifType], UifChCo AS Company, phone_number AS PhoneNumber ,post_number AS PostNumber,fax_number AS FaxNumber,[address],company_website AS WebSiteUrl,is_secret
	FROM
	(
			SELECT m.id,m.[UifUser],[UifType],UifEml,Question,Answer FROM 
			(
				SELECT ID,[UifUser],[UifType],UifEml FROM Member AS m
				WHERE ID = 21501
			) AS m
		INNER JOIN dbo.MemberDetail AS md ON m.id = md.UserID
		WHERE Question IN ('UifName','UifChCo','phone_number','post_number','fax_number','address','company_website','is_secret')
	) AS a
	PIVOT
	(
		MAX(Answer) FOR Question IN (UifName,UifChCo,phone_number,post_number,fax_number,address,company_website,is_secret)
	) AS p

运行这条语句会得到什么结果呢?(看下图)

poivt_over

这条语句看起来是不是比Case更直观点呢!

简单吧!你也可以试试。

Tag: 标签: SqlServerPivot操作Pivot

http://xbf321.cnblogs.com/

posted @ 2009-04-30 10:14  兴百放  阅读(4616)  评论(3编辑  收藏  举报