1、行转列

现有数据:

期望数据:

1.1建表建数据

  1. IF OBJECT_ID('temp_20170701','u') IS NOT NULL DROP TABLE temp_20170701
  2. CREATE TABLE temp_20170701 (
  3. ID INT PRIMARY KEY IDENTITY(1,1),
  4. NAME NVARCHAR(50),
  5. Subjectname NVARCHAR(50),
  6. Score INT
  7. )
  8.  
  9. INSERT dbo.temp_20170701( Name, subjectname, Score )
  10. SELECT 'A','语文','20' UNION
  11. SELECT 'A','数学','30' UNION
  12. SELECT 'A','英语','40' UNION
  13. SELECT 'B','语文','50' UNION
  14. SELECT 'B','数学','60' UNION
  15. SELECT 'B','英语','70' UNION
  16. SELECT 'C','语文','80' UNION
  17. SELECT 'C','数学','90' UNION
  18. SELECT 'C','英语','100' UNION
  19. SELECT 'D','英语','100'

1.2 .1 静态实现

  1. SELECT Name , MAX(CASE WHEN subjectname='语文' THEN Score ELSE 0 END)语文 ,
  2. MAX(CASE WHEN subjectname='数学' THEN Score ELSE 0 END)数学,
  3. MAX(CASE WHEN subjectname='英语' THEN Score ELSE 0 END)英语
  4. FROM dbo.temp_20170701 GROUP BY Name

1.2.2 动态实现 

  1. DECLARE @sql varchar(500)
  2. SET @sql='select Name '
  3. SELECT @sql=@sql+',max(case subjectname when '''+subjectname+''' then Score else 0 end)['+subjectname+']'
  4. FROM(SELECT DISTINCT subjectname FROM temp_20170701)a
  5. SET @sql=@sql+' from temp_20170701 group by Name'
  6. --SELECT @sql
  7. EXEC(@sql)

2、行转列 逗号隔开

现有数据如1的第一张图

期望数据:

2.1、使用xml path

  1. SELECT Name ,Score=STUFF((SELECT ','+CONVERT(NVARCHAR(max),Score) FROM temp_20170701 t1 WHERE t1.NAME=t2.NAME FOR XML PATH('')),1,1,'')
  2. FROM temp_20170701 t2 GROUP BY t2.NAME

2.2、使用 函数

  1. CREATE FUNCTION [dbo].[HConvertL]
  2. (
  3. @GroupId nvarchar(max)
  4. )
  5. RETURNS [nvarchar](max)
  6. AS
  7. BEGIN
  8. DECLARE @ReturnValue [nvarchar](max)
  9. SET @ReturnValue = ''
  10. SELECT @ReturnValue=@ReturnValue + RTRIM(LTRIM(Score)) + ','
  11. FROM temp_20170701
  12. WHERE NAME = @GroupId
  13. SET @ReturnValue = ','+@ReturnValue --substring(@ReturnValue,1,len(@ReturnValue)-1)
  14. RETURN @ReturnValue
  15. END
  16.  
  17. SELECT DISTINCT Name,dbo.[HConvertL](name) Score FROM temp_20170701

3、列转行

原始数据:

期望数据:

3.1建表建数据

  1. IF OBJECT_ID('tempdb..#temp_20170701_02','U') IS NOT NULL DROP TABLE #temp_20170701_02
  2. CREATE TABLE #temp_20170701_02
  3. (
  4. ID INT PRIMARY KEY IDENTITY(1,1),
  5. NAME NVARCHAR(50),
  6. 语文 INT NOT NULL DEFAULT 0,
  7. 数学 INT NOT NULL DEFAULT 0,
  8. 英语 INT NOT NULL DEFAULT 0
  9. )
  10. INSERT #temp_20170701_02( NAME, 语文, 数学, 英语 )
  11. SELECT 'A',20,30,40 UNION
  12. SELECT 'B',50,60,70 UNION
  13. SELECT 'C',80,90,100 UNION
  14. SELECT 'D',100,0,0

3.2 使用UNPIVOT实现

  1. SELECT Name ,
  2. SubjectName ,
  3. Score
  4. FROM #temp_20170701_02 UNPIVOT ( Score FOR SubjectName IN ( 语文, 数学, 英语 ) ) #temp_20170701_02

  

sql 行列互转的更多相关文章

  1. 关于SQLServer 中行列互转的实例说明

    这几天在做一个招标系统中审批模块,其中关于报价信息这块,用到了pivot和unpivot来实现数据的行列互转,下面简单介绍一下,实际案例,便于回忆和记录相关的条件下使用的情况.pivot 与 unpi ...

  2. SQL 行列倒置

    SQL的的行列倒置已经不是新知识了,但在博主的技术咨询期间,仍发现其实有很多人并不了解这块,所以在此专门写一篇博客记录.本文将以Mysql为例,并以数据采集指标信息获取为例子.在下面的例子,你可以在s ...

  3. SQL行列转换6种方法

    在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解 ...

  4. SQL行列乾坤大挪移

    “生活总是这样,有时候,你需要一个苹果,但别人却给了你一个梨.” 今天dalao邮件里需要添加一张每月累计长长的图,可是,拿到手上的SQL导出数据不符合我最爱的pyecharts的数据输入格式,头大. ...

  5. 数据透视表sql:用SQL行列转换实现数据透视的一些思考

    用SQL行列转换实现数据透视的一些思考 摘要:根据对报表开发过程中碰到的需要用SQL行列转换进行解决的一类查询统计问题的分析,逐步探索求解得到一种较通用的解决思路,并用函数进行实现.该解决思路及函数实 ...

  6. sql server pivot/unpivot 行列互转

    有时候会碰到行转列的需求(也就是将列的值作为列名称),通常我都是用 CASE END + 聚合函数来实现的. 如下: declare @t table (StudentName nvarchar(20 ...

  7. SQL 表 和字符串 互转 (行列互转)

    -- 表转字符串 )) ,,'') --字符串转表 ),)) ,) )) AS BEGIN DECLARE @StartIndex INT --开始查找的位置 DECLARE @FindIndex I ...

  8. sql server 行列互转

    1 列转行 测试脚本 ),课程 ),分数 int) ) ) ) ) ) ) go 转化脚本 select 姓名 , end) 语文, end) 数学 , end) 物理 from tb group b ...

  9. sqlservcer行列互转

    普通行列转换 行转列 假设有张学生成绩表(tb)如下:Name Subject Result张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94*/---- ...

随机推荐

  1. CSS3 Flex 布局教程

    网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂 ...

  2. AVL树(查找、插入、删除)——C语言

    AVL树 平衡二叉查找树(Self-balancing binary search tree)又被称为AVL树(AVL树是根据它的发明者G. M. Adelson-Velskii和E. M. Land ...

  3. SpringBoot分布式:Dubbo+zookeeper

    西部开源-秦疆老师:SpringBoot + Dubbo + zookeeper 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! 基础知识 ...

  4. arukas 樱花免费docker容器获取IP和端口

    arukas 樱花免费docker容器,可以安装linux系统,但是每隔一段时间会重启,重启以后IP地址和映射到公网的端口都会变,获取IP和端口,我研究了很久终于找到了C#获取IP和端口的办法,用来搭 ...

  5. spring-boot-plus项目目录结构(六)

    spring-boot-plus项目目录结构 目录结构 bin:启动/重启命令脚本目录 logs:部署后记录日志目录 assembly:maven打包配置文件目录 java:源代码目录 resourc ...

  6. CSS布局:元素水平居中

    CSS布局之元素水平居中 本文将依次介绍在不同条件下实现水平居中多种方法 一.使用 text-align: center : 适用于块级元素内部的行内元素水平居中(也适用于图片的水平居中) 此方法对i ...

  7. @WebInitParam注解

    Servlet注解——@WebInitParam多个InitParam的写法 使用@WebInitParam配置多个InitParam,使某些页面不被拦截.在过滤器Filter.java下添加注解:@ ...

  8. 用Canvas实现Photoshop的钢笔工具(贝塞尔曲线)

    前两天在用Canvas实现一个绘制路径的小功能.做完之后发现加以完善可以“复刻”一下PS里面的钢笔工具. PS里的钢笔工具对我来说是PS中最好用的工具! 所以本文主要介绍如何用Canvas来实现Pho ...

  9. CTPN

    1. https://zhuanlan.zhihu.com/p/34757009  (原理) 2. https://www.jianshu.com/p/471bdbd0170d (bi-LSTM)

  10. 基于CAS分析对ABA问题的一点思考

    基于CAS分析对ABA问题的一点思考 什么是CAS? 背景 synchronized加锁消耗太大 volatile只保证可见性,不保证原子性 基础 用CPU提供的特殊指令,可以: 自动更新共享数据; ...