zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    vsprintf解析
    带grub的软盘镜像制作
    SunnyOS准备4
    SunnyOS准备3
    SunnyOS准备1
    汇编第七日
    汇编第六日
    解决k8s集群中mount volume失败的问题
    更新k8s集群的证书
    为k8s集群配置自定义告警
  • 原文地址:https://www.cnblogs.com/xbf321/p/1446787.html
Copyright © 2011-2022 走看看