数据库-行转列的语法
1.表: PerTab
字段:name, title, values
原内容:一月 产品A 120
二月 产品A 20
一月 产品B 230
二月 产品B 400
-----------------------------------------------
查询结果: 月份 产品A 产品B 数量(Values)
一月 120 230
二月 20 400
-----------------------------------------------
SQl语法:
select name, sum(case title when '产品A' then values else 0 end ) as 产品A from PerTab group by name
备注: 其中中间的可以重复,得到所有的列
还可以用这样的SQL语句:
select p1.name,sum(p1.values) as 产品 A,sum(p2.values) as 产品B from pertab p1,pertab p2 where p1.name=p2.name and p1.ti
tle='产品A' and p2.title='产品B' group by name;
可以自动生成的语句:
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case title when '''+title+''' then values end) ['+title+']'
from (select distinct title from PerTab) as a
select @sql = @sql+' from PerTabgroup by name'
exec(@sql)
示例二:
stuNo stuName
1 aa
2 bb
stuNo course result
1 Chinese 80
1 English 92
2 Chinese 75
2 English 86
要求显示如下:
stuNo stuName Englist Chinese total
1 aa 80 92 172
1 bb 75 86 161
select s.stuno as stuNo, s.stuName as stuName,
c1.result as english, c2.result as chinese,
(c1.result+c2.result) as total from
cg c1 inner join cg c2 on c1.stuno=c2.stuno inner
join student s on c1.stuno=s.stuno where
c1.course='english' and c2.course='chinese';
示例三:
姓名 课程 分数
---- ---- ----
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
结果:
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
-------------------
--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名
////上面这条查询语句在DB2中也适用,本人验证过.//////////////////////////
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)
分享到:
相关推荐
### 标题解析:SQL列转行及行转列的通用存储过程 该标题表明文章主要介绍在SQL中如何通过一个通用的存储过程实现列数据转化为行数据(列转行),或者反过来将行数据转化为列数据(行转列)。这两种转换方式在处理多...
SQL行专列列转行的存储过程 很实用的 SQL行专列列转行的存储过程 很实用的
可以把一列转成一行…… 分隔符默认为英文逗号,也可以转成INSERT 中VALUES()后面的单引号加逗号...以前用T-SQL时,总是把一列复制到EXCEL中,转置,然后复制到记本事中,把一空格替换成逗号……,这个工具可以直接搞定
在本案例中,我们将详细探讨如何在SQL Server 2005中进行列转行的操作,特别是通过存储过程来实现。 首先,列转行通常用于处理具有固定列数但列名可能变化的数据。例如,你可能有一个表,其中每个月的销售数据存储...
这条 SQL 语句将动态生成列转行语句,并执行该语句以获取结果。 添加平均分和总分 在获取学生的所有科目成绩后,我们还可以计算每个学生的平均分和总分。 ```sql select name 姓名, max(case subject when '...
sql 行转列 与列转行,oracle ,msssql等,详细数据库操作方法,各种例子,欢迎大家学习。、~
### SqlServer列转行的另一种方式 在数据库处理过程中,经常需要将数据按照特定的方式进行转换,以便更好地满足业务需求或提高查询效率。常见的转换包括列转行、行转列等操作。通常我们使用`PIVOT`和`UNPIVOT`来...
SQL Server 列转行代码,供大伙参考
DB2 SQL 通过函数(CONCAT/POSSTR/LOCATE)实现行转列,列转行 可以按照标点把多列转换为一行,多行转换为一列
SqlServer如何进行行转列和列转行方法
### SQL语句实现表的行列转换,行转列,列转行 在处理数据库时,我们经常需要对数据进行各种变换以适应不同的分析需求。其中,“行列转换”就是一种非常实用的功能,它可以帮助我们将表中的行数据转换为列数据,...
### SQL列转行显示方法 #### 一、背景及需求 在处理数据库中的数据时,有时候需要将一列中的多个值转化为多列的形式展示,这通常称为“列转行”操作。这种转换可以使得数据更适合特定的报表或分析需求。例如,原始...
MySQL 虽然没有内置的行转列和列转行函数,但通过 CASE、GROUP_CONCAT、UNION ALL 和 JOIN 等 SQL 语句,我们可以灵活地对数据进行转换,满足不同的数据分析需求。在实际应用中,应根据数据的特性和业务需求选择合适...
### SQL Server 使用 UNPIVOT 函数实现列转行 #### 概述 在 SQL Server 中,`UNPIVOT` 函数是一个非常实用的功能,主要用于将数据表中的列转换为行,即“列转行”操作。这种操作在数据分析过程中经常用到,尤其是...
本文将详细介绍两种实现SQL Server 2005中列转行的方法:使用PIVOT和使用CASE语句。 **方法一:使用PIVOT** PIVOT是SQL Server 2005引入的一个新特性,用于将一个表中的列转换为行。以下是一个基本的PIVOT使用示例...
SQL 列转行 能直接运行
### 关于SQL Server数据库中列转行的研究 #### 背景与问题描述 在进行数据处理时,经常需要将数据库表中的一列带有逗号分隔的字符串数据转换为多行显示。这种操作通常被称为“列转行”,即从单个列中拆分出多个值,...
有case when方式和2005之后的内置pivot和unpivot方法来实现,行列互转,可以分为静态互转,动态互转。
精典的SQL语句,行转列,列转行的语句 本文共分六个部分,分别讨论精典的SQL语句,行转列,列转行的语句,行列转换、取得数据表的所有列名、更改用户密码、判断表的哪些字段不允许为空、找到含有相同字段的表六个...