`

SQLServer2005中使用Pivot,进行行列转换遇到的问题

    博客分类:
  • SQL
阅读更多

1.创建表脚本

 

if exists (select 1

            from  sysobjects

           where  id = object_id('Insurances')

            and   type = 'U')

   drop table Insurances

go

 

/*==============================================================*/

/* Table: Insurances                                            */

/*==============================================================*/

create table Insurances (

   RefID                uniqueidentifier     not null,

   HRMS                 nvarchar(20)         null,

   Name                 nvarchar(20)         null,

   InsuranceMoney       money                null,

   InsuranceName        nvarchar(100)        not null,

   constraint PK_INSURANCES primary key (RefID)

)

go

 

 

2.测试数据脚本

 

insert into Insurances values (newid(),1,'张三',200,'养老保险')

insert into Insurances values (newid(),1,'张三',300,'医疗保险')

insert into Insurances values (newid(),2,'李四',250,'养老保险')

insert into Insurances values (newid(),2,'李四',350,'医疗保险')

insert into Insurances values (newid(),3,'王二',150,'养老保险')

insert into Insurances values (newid(),3,'王二',300,'医疗保险')

 

3.查询表数据

 

select HRMS,Name,InsuranceMoney,InsuranceName From Insurances

 

HRMS                 Name                 InsuranceMoney        InsuranceName

-------------------- -------------------- --------------------- ----------

1                    张三                  200.00                养老保险

2                    李四                  350.00                医疗保险

2                    李四                  250.00                养老保险

1                    张三                  300.00                医疗保险

3                    王二                  300.00                医疗保险

3                    王二                  150.00                养老保险

 

4.转置表数据

 

select * from

(

select HRMS,Name,InsuranceMoney,InsuranceName from Insurances

) p

Pivot (

sum(InsuranceMoney)

FOR InsuranceName IN

( [医疗保险], [养老保险]))

as pvt

 

 

HRMS                 Name                 医疗保险                 养老保险

-------------------- -------------------- --------------------- ---------------------

2                    李四                  350.00                250.00

3                    王二                  300.00                150.00

1                    张三                  300.00                200.00

 

声明:以上测试数据来自互联网,重点强调下面提示错误的解决办法

http://www.cnblogs.com/icebutterfly/archive/2009/08/07/1541322.html

 

执行4中的语句会出现错误提示

   'Pivot' 附近有语法错误。您可能需要将当前数据库的兼容级别设置为更高的值,以启用此功能。有关存储过程 sp_dbcmptlevel 的信息,请参见帮助。

解决办法

   需要将当前数据库的兼容级别设置为更高的值,默认80,设置为90即可

 

EXEC sp_dbcmptlevel '数据库名', 90

 

查看当前数据库的兼容级别:右击当前数据库---->属性---->选项

分享到:
评论

相关推荐

    SQL 2008行列转换的pivot

    ### SQL 2008 行列转换 (Pivot) 的动态实现 #### 知识点一:行列转换(Pivot)的概念与应用场景 在数据库查询中,有时我们需要将数据表中的行转换为列,或者将列转换为行,这种操作被称为行列转换。行列转换在报表...

    sql server 行列转换

    通过上述示例可以看出,使用动态SQL可以有效地实现SQL Server中的行列转换。虽然这种方法具有一定的灵活性和适用性,但在实际应用中还需要考虑其潜在的安全性和维护性问题。在实际开发过程中,应根据具体需求和场景...

    Sql Server 2005 行转列的实现 (横排)

    在SQL Server 2005中,我们经常遇到这样的需求:需要将数据库中的多行数据转换为多列显示,这通常被称为“行转列”或“行列互换”。这种操作在数据分析、报表制作或者简化数据显示时非常有用。本文将详细讲解如何在...

    sql查询中行列转换

    本篇文章将详细解释如何通过一条SQL查询语句实现行列转换,并且会针对两种不同的SQL Server版本(SQL Server 2000和SQL Server 2005)来探讨具体的实现方法。 ### 数据准备 首先,我们需要构建一个简单的数据表...

    Sqlserver行列转换.doc

    在SQL Server中,进行行列转换是数据库操作中常见的需求,尤其是在数据分析和报表展示时。这种转换通常涉及到将一列的数据转化为多列,或者相反。在提供的文档中,讨论的是如何将具有多个号码的同一地址数据转换成每...

    SQL 数据行列转换

    3. **动态SQL的使用**:探讨如何通过动态SQL来解决行列转换过程中遇到的问题。 4. **实际案例分析**:通过一个具体的示例,展示如何应用上述知识点完成行列转换任务。 #### SQL Server中的行列转换 在数据库管理中...

    sql 2005 纵向表横向输出存储过程

    在SQL Server 2005中,处理数据时有时会遇到需要将纵向排列的数据转换为横向展示的情况,这种操作被称为“行列转换”。标题中的“sql 2005 纵向表横向输出存储过程”指的就是利用T-SQL语言编写的一个存储过程,用于...

    SQL之行列互变问题

    在处理数据库中的数据时,我们经常遇到需要将数据从一种格式转换为另一种格式的需求,其中最常见的一种就是行列互换的问题。例如,原始数据是按照列的形式存储的,而我们需要将其转化为按行存储的数据,反之亦然。...

    定制的交叉表报表

    5. **PIVOT操作**:SQL Server提供了PIVOT操作,它允许你将行数据转换为列数据。这在构建交叉表时非常有用,可以让你轻松地将一系列行值转换为列头。 6. **ORDER BY和HAVING子句**:进一步调整结果,例如根据特定...

Global site tag (gtag.js) - Google Analytics