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) 的动态实现 #### 知识点一:行列转换(Pivot)的概念与应用场景 在数据库查询中,有时我们需要将数据表中的行转换为列,或者将列转换为行,这种操作被称为行列转换。行列转换在报表...
通过上述示例可以看出,使用动态SQL可以有效地实现SQL Server中的行列转换。虽然这种方法具有一定的灵活性和适用性,但在实际应用中还需要考虑其潜在的安全性和维护性问题。在实际开发过程中,应根据具体需求和场景...
在SQL Server 2005中,我们经常遇到这样的需求:需要将数据库中的多行数据转换为多列显示,这通常被称为“行转列”或“行列互换”。这种操作在数据分析、报表制作或者简化数据显示时非常有用。本文将详细讲解如何在...
本篇文章将详细解释如何通过一条SQL查询语句实现行列转换,并且会针对两种不同的SQL Server版本(SQL Server 2000和SQL Server 2005)来探讨具体的实现方法。 ### 数据准备 首先,我们需要构建一个简单的数据表...
在SQL Server中,进行行列转换是数据库操作中常见的需求,尤其是在数据分析和报表展示时。这种转换通常涉及到将一列的数据转化为多列,或者相反。在提供的文档中,讨论的是如何将具有多个号码的同一地址数据转换成每...
3. **动态SQL的使用**:探讨如何通过动态SQL来解决行列转换过程中遇到的问题。 4. **实际案例分析**:通过一个具体的示例,展示如何应用上述知识点完成行列转换任务。 #### SQL Server中的行列转换 在数据库管理中...
在SQL Server 2005中,处理数据时有时会遇到需要将纵向排列的数据转换为横向展示的情况,这种操作被称为“行列转换”。标题中的“sql 2005 纵向表横向输出存储过程”指的就是利用T-SQL语言编写的一个存储过程,用于...
在处理数据库中的数据时,我们经常遇到需要将数据从一种格式转换为另一种格式的需求,其中最常见的一种就是行列互换的问题。例如,原始数据是按照列的形式存储的,而我们需要将其转化为按行存储的数据,反之亦然。...
5. **PIVOT操作**:SQL Server提供了PIVOT操作,它允许你将行数据转换为列数据。这在构建交叉表时非常有用,可以让你轻松地将一系列行值转换为列头。 6. **ORDER BY和HAVING子句**:进一步调整结果,例如根据特定...