sql语句实现行转列的3种方法实例

时间:2021-11-15 23:18:01

一般在做数据统计的时候会用到行转列,假如要统计学生的成绩,数据库里查询出来的会是这样的,但这并不能达到想要的效果,所以要在查询的时候做一下处理,下面话不多说了,来一起看看详细的介绍。

sql语句实现行转列的3种方法实例

CREATE TABLE TestTable(

 [Id] [int] IDENTITY(1,1) NOT NULL,

 [UserName] [nvarchar](50) NULL,

 [Subject] [nvarchar](50) NULL,

 [Source] [numeric](18, 0) NULL

) ON [PRIMARY]

go

INSERT INTO TestTable
([UserName],[Subject],[Source]) 

 SELECT N'张三',N'语文',60 UNION ALL

 SELECT N'李四',N'数学',70 UNION ALL

 SELECT N'王五',N'英语',80 UNION ALL

 SELECT N'王五',N'数学',75 UNION ALL

 SELECT N'王五',N'语文',57 UNION ALL

 SELECT N'李四',N'语文',80 UNION ALL

 SELECT N'张三',N'英语',100

GO

这里我用了三种方法来实现行转列第一种:静态行转列  
 

select UserName 姓名,

sum(case Subject when '语文' then Source else 0 end) 语文,sum(case
Subject when '数学' then Source else 0 end) 数学,

sum(case Subject when '英语' then Source else 0 end) 英语 from
TestTable group by UserName



用povit行转列  
 

select * from

(select UserName,Subject,Source from TestTable)
testpivot(sum(Source) for Subject in(语文,数学,英语)

) pvt



用存储过程行转列  
 

alter proc pro_test

@userImages varchar(200),

@Subject varchar(20),

@Subject1 varchar(200),

@TableName varchar(50)

as

 declare @sql varchar(max)='select * from (select
' @userImages ' from' @TableName ') tab

pivot

(

sum(' @Subject ') for Subject(' @Subject1 ')

) pvt'

exec (@sql)

go

exec pro_test 'UserName,Subject,Source',

'TestTable',

'Subject',

'语文,数学,英语'



它们的效果都是这样的

sql语句实现行转列的3种方法实例

以上三种方式实现行转列,我们可以根据自己的需求采用不同的方法

sql语句实现行转列的3种方法实例的更多相关文章

  1. Sql 语句收集——行转列

    SQL行转列汇总 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in ...

  2. mysql sql语句:行转列问题

    存在表score,记录学生的考试成绩,如下图所示: 现要求以 学生姓名,语文,数学,英语 这种格式显示学生成绩,如下图所示 具体步骤如下: 1.首先,使用case when函数输出单个课程的成绩 ca ...

  3. SQL语句实现行转列

    最近在维护一个项目,出现了一下bug需要进行调试,于是把正式库上面的代码搬到本地库上面,数据库是本地的,跑项目的时候调试发现代码里面带有wmsys.wm_concat函数的SQL语句出现错误,经排查发 ...

  4. sql语句实现行转列练习

    create table STUDENT_SCORE( name VARCHAR2(20), subject VARCHAR2(20), score NUMBER(4,1));insert into ...

  5. SQL 语句实现行转列

    CREATE TABLE #tempcloum( [productNum] varchar() null, [year1] decimal not null, [year2] decimal not ...

  6. Oracle行转列的3种方法

    测试表为A3 , 有5个字段:ID1, ID2, ID3, ID4, ID5 测试数据如下: ID1 ID2 ID3 ID4 ID5 1 2 3 4 5 11 22 33 44 55 111 222 ...

  7. SQL server 动态行转列

    用聚合函数配合CASE语句实现行转列功能: 现在分享一下具体实现代码: 转换前效果: PlanName PlanType PlanLimit 计划1 计划类型1 RMB 1,000,000 计划1 计 ...

  8. SQL语句之行操作

    SQL语句系列 1.SQL语句之行操作 2.SQL语句之表操作 3.SQL语句之数据库操作 4.SQL语句之用户管理 关系型数据库的存储形式 在关系型数据库中,数据都是以类似于Excel表格的形式存储 ...

  9. MySQL之唯一索引、外键的变种、SQL语句数据行操作补充

    0.唯一索引 unique对num进行唯一限制,表示num是独一无二的,uql是唯一索引名称 上面为联合索引:num和xx不能完全一样  1.外键的变种 a. 用户表和部门表 用户: 1 alex 1 ...

随机推荐

  1. skiing

    package noj_skiing; import java.util.*; import java.math.*; public class Main { public static void m ...

  2. Uva11538 排列组合水题

    画个图就很容易推出公式: 设mn=min(m,n),mx=max(m,n) 对角线上: 横向:m*C(n,2) 纵向:n*C(m,2) 因为所有的C函数都是只拿了两个,所以可以优化下.不过不优化也过了 ...

  3. 微软职位内部推荐-Senior SDE for Windows App Experience

    微软近期Open的职位: Job posting title: Senior Software Development Engineer Location: China, Beijing Divisi ...

  4. Objective-C之run loop详解

    Objective-C之run loop详解 做了一年多的IOS开发,对IOS和Objective-C深层次的了解还十分有限,大多还停留在会用API的级别,这是件挺可悲的事情.想学好一门语言还是需要深 ...

  5. opencv构建高斯卷积核

    关于高斯核函数可以参见阮一峰老师的日志:高斯模糊的算法 如何使用高斯核进行高斯模糊可以参见我的另一篇日志:opencv构建自定义卷积 Mat Gaussian_kernal(int kernel_si ...

  6. Leetcode: Encode and Decode TinyURL

    Note: This is a companion problem to the System Design problem: Design TinyURL. TinyURL is a URL sho ...

  7. gcc update in centos to 6.3 by scl

    CentOS 7虽然已经出了很多年了,但依然会有很多人选择安装CentOS 6,CentOS 6有些依赖包和软件都比较老旧,如今天的主角gcc编译器,CentOS 6的gcc版本为4.4,CentOS ...

  8. Install rapyuta Robot Cloud Engine on Ubuntu14.04

    # -Rapyuta-installation-in-Ubuntu14.04-LTS-Trusty-This gzip folder is a tested version which can ins ...

  9. pyglet 绝对路径资源导入以及视频播放(二)

    今天终于搞明白怎么把绝对路径内的视频文件和音频文件导入到资源... 代码: #-*- coding:gbk -*- import pyglet import os window=pyglet.wind ...

  10. ob系列函数中常用函数

    ob_start();                //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面. ob_clean();               //删 ...