---------------------------------
-- Author: htl258(Tony)
-- SuBject: SQL2005行列互转整理
-- Date : 2009-08-20 21:00:00
---------------------------------
--1.行转列
If not object_id('[tb]') is null
Drop table [tb]
Go
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
Insert tb
Select '张三','语文',60 union all
Select '张三','数学',70 union all
Select '张三','英语',80 union all
Select '张三','物理',90 union all
Select '李四','语文',65 union all
Select '李四','数学',75 union all
Select '李四','英语',85 union all
Select '李四','物理',95
go
--静态查询:
select * from tb pivot(max(分数) for 课程 in(语文,数学,英语,物理)) b
--动态查询:
declare @s varchar(max)
select @s=isnull(@s+',','')+课程 from tb group by 课程
select @s='select * from tb pivot(max(分数) for 课程 in('+@s+'))b'
exec(@s)
/*
姓名 语文 数学 英语 物理
---------- ----------- ----------- ----------- -----------
李四 65 75 85 95
张三 60 70 80 90
(2 行受影响)
*/
--加上总分静态查询
select 姓名,语文,数学,英语,物理,总分
from (select *,总分=sum(分数)over(partition by 姓名) from tb) a
pivot(max(分数) for 课程 in(语文,数学,英语,物理))b
--加上总分动态查询
declare @s varchar(max)
select @s=isnull(@s+',','')+课程 from tb group by 课程
select @s='
select 姓名,'+@s+' from
(select *,总分=sum(分数)over(partition by 姓名) from tb) a
pivot(max(分数) for 课程 in('+@s+'))b'
exec(@s)
/*
姓名 语文 数学 英语 物理 总分
---------- ----------- ----------- ----------- ----------- -----------
张三 60 70 80 90 300
李四 65 75 85 95 320
(2 行受影响)
*/
--2.列转行
If not object_id('tb') is null
Drop table tb
Go
Create table tb(姓名 nvarchar(2),[语文] int,[数学] int,[英语] int,[物理] int)
Insert tb
Select '张三',60,70,80,90 union all
Select '李四',65,75,85,95
Go
--静态查询
select * from tb unpivot(分数 for 课程 in(语文,数学,英语,物理))b
--动态查询
declare @s varchar(max)
select @s=isnull(@s+',','')+name from syscolumns where id=object_id('tb') and name not in('姓名') order by colid
select @s='select * from tb unpivot(分数 for 课程 in('+@s+'))b'
exec(@s)
/*
姓名 分数 课程
------ ---- ------
李四65语文
李四75数学
李四85英语
李四95物理
张三60语文
张三70数学
张三80英语
张三90物理
(8 行受影响)
*/
分享到:
相关推荐
### SQL Server 行列转换知识点解析 #### 一、行列转换概述 在处理数据库查询时,我们经常会遇到需要将表中的行数据转换为列数据的需求,这种操作通常被称为“行列转换”。例如,当我们需要汇总不同类别的数据并将...
### SQL 2008 行列转换 (Pivot) 的动态实现 #### 知识点一:行列转换(Pivot)的概念与应用场景 在数据库查询中,有时我们需要将数据表中的行转换为列,或者将列转换为行,这种操作被称为行列转换。行列转换在报表...
SQL 语句行列转换(附带数据库、表、视图操作) SQL 语句行列转换是数据库管理系统中的一种常见操作,它可以将数据从行转换为列,或者从列转换为行。在这个过程中,需要使用数据库管理语言(Database Management ...
### SQL 数据行列转换 #### 知识点概览 1. **SQL Server中的行列转换**:介绍如何在SQL Server环境中利用内置函数实现数据从行到列的转换。 2. **FOR XML PATH() 函数的应用**:详细解释FOR XML PATH()函数在行列...
### SQL2000 和 SQL2005 下行转列转换示例解析 #### 一、背景介绍 本文档提供了在SQL Server 2000和SQL Server 2005两个版本中进行行转列操作的具体示例。行转列是一种常见的数据处理方式,用于将表格中的行数据...
在Oracle SQL中,行列转换是一种常见的数据操作需求,主要用于将数据表中的行转换为列,或将列转换为行,以此来满足不同的数据展示或分析需求。这种转换在处理多维度数据、汇总数据或是进行复杂查询时特别有用。下面...
Pivot 和 UnPivot 是 SQL Server 2005 中引入的两个语法,用于实现行列转换。 Pivot Pivot 语法的主要作用是将列值旋转为列名,即行转列。其基本语法为: ``` SELECT * FROM table_source PIVOT (聚合函数(value_...
本篇文章将深入探讨一个SQL存储过程的实现方式,该存储过程主要用于完成“行转列”(即行列转换)的操作。通过这种方式,可以有效地将数据库表中的行数据转换为列的形式进行展示或处理,这对于数据分析和报告生成等...
### Oracle SQLServer 行列转换知识点详解 #### 一、SQLServer 行转列方法 在SQLServer中,实现行转列的操作有两种主要方法:一种是利用`CASE...WHEN`语句配合`GROUP BY`聚合函数的方式;另一种是通过`PIVOT`操作...
在Oracle数据库中,有时我们需要将表格中的行转换为列或将列转换为行,这种操作被称为行列转换。这种转换对于数据分析、报表制作等场景非常有用。本文将详细介绍Oracle中如何进行行列转换,并提供实际的例子。 ####...
在SQL Server 2005中,行与列之间的转换是一种常见的数据操作需求,尤其是在数据分析、报表生成或数据展示时。以下将详细讲解如何在SQL Server 2005中实现这种转换。 首先,我们来看两个示例表格:`Company` 和 `...
### SQL2000 转换成SQL2005 #### 知识点概述 在将SQL Server 2000的数据库升级至SQL Server 2005的过程中,由于数据库文件会自动升级到2005版本,因此无法在SQL Server 2000环境中重新附加这些文件。直接通过恢复...
在SQL Server中,进行行列转换是数据库操作中常见的需求,尤其是在数据分析和报表展示时。这种转换通常涉及到将一列的数据转化为多列,或者相反。在提供的文档中,讨论的是如何将具有多个号码的同一地址数据转换成每...
在实际的数据分析和报表制作过程中,我们经常需要将数据的列与行进行互换,这就是所谓的“SQL行列转换”。这种操作在处理汇总数据、创建透视表或者进行特定统计分析时尤其常见。以下我们将详细探讨SQL中的行列转换...
### SQL Server 2005+ 版本行列转换数据脚本知识点解析 #### 一、数据表创建脚本分析 根据题目中的信息,我们首先关注到的是一个名为`dduser`的数据表创建脚本。该脚本是在SQL Server 2005及以上版本中使用的。...
在本文中,我们将探讨如何将SQL Server 2008数据库转换为SQL Server 2005,这是一个常见的操作,特别是在升级或迁移过程中遇到兼容性问题时。 首先,你需要SQL Server Management Studio 2008 (SSMS)来进行这个转换...
"SQL2005精简版一键安装"是指通过一个简化的过程来快速安装SQL Server 2005 Express Edition,大大降低了安装的复杂性。 通常,SQL Server的安装过程包括多个步骤,如接受许可协议、选择安装类型、配置服务器实例、...
行列转换实例 表ttt有三个字段 seq --序列 jcxm --检查项目 zhi --值 数据分别如下: seq jcxm zhi ------- -------- -------- 11 1 0.50 11 2 0.21 11 3 0.25 12 1 0.24 12 2...
在SQL中,行列转换是一种常见的数据操作,尤其在数据分析和报表生成时十分有用。这个案例主要涉及了如何将数据从行格式转换为列格式,针对的是一个学生成绩表,其中包含姓名、科目和成绩三个字段。我们将分别介绍...