sql 行列互转
1、行转列
现有数据:
期望数据:
1.1建表建数据
- IF OBJECT_ID('temp_20170701','u') IS NOT NULL DROP TABLE temp_20170701
- CREATE TABLE temp_20170701 (
- ID INT PRIMARY KEY IDENTITY(1,1),
- NAME NVARCHAR(50),
- Subjectname NVARCHAR(50),
- Score INT
- )
- INSERT dbo.temp_20170701( Name, subjectname, Score )
- SELECT 'A','语文','20' UNION
- SELECT 'A','数学','30' UNION
- SELECT 'A','英语','40' UNION
- SELECT 'B','语文','50' UNION
- SELECT 'B','数学','60' UNION
- SELECT 'B','英语','70' UNION
- SELECT 'C','语文','80' UNION
- SELECT 'C','数学','90' UNION
- SELECT 'C','英语','100' UNION
- SELECT 'D','英语','100'
1.2 .1 静态实现
- SELECT Name , MAX(CASE WHEN subjectname='语文' THEN Score ELSE 0 END)语文 ,
- MAX(CASE WHEN subjectname='数学' THEN Score ELSE 0 END)数学,
- MAX(CASE WHEN subjectname='英语' THEN Score ELSE 0 END)英语
- FROM dbo.temp_20170701 GROUP BY Name
1.2.2 动态实现
- DECLARE @sql varchar(500)
- SET @sql='select Name '
- SELECT @sql=@sql+',max(case subjectname when '''+subjectname+''' then Score else 0 end)['+subjectname+']'
- FROM(SELECT DISTINCT subjectname FROM temp_20170701)a
- SET @sql=@sql+' from temp_20170701 group by Name'
- --SELECT @sql
- EXEC(@sql)
2、行转列 逗号隔开
现有数据如1的第一张图
期望数据:
2.1、使用xml path
- SELECT Name ,Score=STUFF((SELECT ','+CONVERT(NVARCHAR(max),Score) FROM temp_20170701 t1 WHERE t1.NAME=t2.NAME FOR XML PATH('')),1,1,'')
- FROM temp_20170701 t2 GROUP BY t2.NAME
2.2、使用 函数
- CREATE FUNCTION [dbo].[HConvertL]
- (
- @GroupId nvarchar(max)
- )
- RETURNS [nvarchar](max)
- AS
- BEGIN
- DECLARE @ReturnValue [nvarchar](max)
- SET @ReturnValue = ''
- SELECT @ReturnValue=@ReturnValue + RTRIM(LTRIM(Score)) + ','
- FROM temp_20170701
- WHERE NAME = @GroupId
- SET @ReturnValue = ','+@ReturnValue --substring(@ReturnValue,1,len(@ReturnValue)-1)
- RETURN @ReturnValue
- END
- SELECT DISTINCT Name,dbo.[HConvertL](name) Score FROM temp_20170701
3、列转行
原始数据:
期望数据:
3.1建表建数据
- IF OBJECT_ID('tempdb..#temp_20170701_02','U') IS NOT NULL DROP TABLE #temp_20170701_02
- CREATE TABLE #temp_20170701_02
- (
- ID INT PRIMARY KEY IDENTITY(1,1),
- NAME NVARCHAR(50),
- 语文 INT NOT NULL DEFAULT 0,
- 数学 INT NOT NULL DEFAULT 0,
- 英语 INT NOT NULL DEFAULT 0
- )
- INSERT #temp_20170701_02( NAME, 语文, 数学, 英语 )
- SELECT 'A',20,30,40 UNION
- SELECT 'B',50,60,70 UNION
- SELECT 'C',80,90,100 UNION
- SELECT 'D',100,0,0
3.2 使用UNPIVOT实现
- SELECT Name ,
- SubjectName ,
- Score
- FROM #temp_20170701_02 UNPIVOT ( Score FOR SubjectName IN ( 语文, 数学, 英语 ) ) #temp_20170701_02
sql 行列互转的更多相关文章
- 关于SQLServer 中行列互转的实例说明
这几天在做一个招标系统中审批模块,其中关于报价信息这块,用到了pivot和unpivot来实现数据的行列互转,下面简单介绍一下,实际案例,便于回忆和记录相关的条件下使用的情况.pivot 与 unpi ...
- SQL 行列倒置
SQL的的行列倒置已经不是新知识了,但在博主的技术咨询期间,仍发现其实有很多人并不了解这块,所以在此专门写一篇博客记录.本文将以Mysql为例,并以数据采集指标信息获取为例子.在下面的例子,你可以在s ...
- SQL行列转换6种方法
在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解 ...
- SQL行列乾坤大挪移
“生活总是这样,有时候,你需要一个苹果,但别人却给了你一个梨.” 今天dalao邮件里需要添加一张每月累计长长的图,可是,拿到手上的SQL导出数据不符合我最爱的pyecharts的数据输入格式,头大. ...
- 数据透视表sql:用SQL行列转换实现数据透视的一些思考
用SQL行列转换实现数据透视的一些思考 摘要:根据对报表开发过程中碰到的需要用SQL行列转换进行解决的一类查询统计问题的分析,逐步探索求解得到一种较通用的解决思路,并用函数进行实现.该解决思路及函数实 ...
- sql server pivot/unpivot 行列互转
有时候会碰到行转列的需求(也就是将列的值作为列名称),通常我都是用 CASE END + 聚合函数来实现的. 如下: declare @t table (StudentName nvarchar(20 ...
- SQL 表 和字符串 互转 (行列互转)
-- 表转字符串 )) ,,'') --字符串转表 ),)) ,) )) AS BEGIN DECLARE @StartIndex INT --开始查找的位置 DECLARE @FindIndex I ...
- sql server 行列互转
1 列转行 测试脚本 ),课程 ),分数 int) ) ) ) ) ) ) go 转化脚本 select 姓名 , end) 语文, end) 数学 , end) 物理 from tb group b ...
- sqlservcer行列互转
普通行列转换 行转列 假设有张学生成绩表(tb)如下:Name Subject Result张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94*/---- ...
随机推荐
- CSS3 Flex 布局教程
网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂 ...
- AVL树(查找、插入、删除)——C语言
AVL树 平衡二叉查找树(Self-balancing binary search tree)又被称为AVL树(AVL树是根据它的发明者G. M. Adelson-Velskii和E. M. Land ...
- SpringBoot分布式:Dubbo+zookeeper
西部开源-秦疆老师:SpringBoot + Dubbo + zookeeper 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! 基础知识 ...
- arukas 樱花免费docker容器获取IP和端口
arukas 樱花免费docker容器,可以安装linux系统,但是每隔一段时间会重启,重启以后IP地址和映射到公网的端口都会变,获取IP和端口,我研究了很久终于找到了C#获取IP和端口的办法,用来搭 ...
- spring-boot-plus项目目录结构(六)
spring-boot-plus项目目录结构 目录结构 bin:启动/重启命令脚本目录 logs:部署后记录日志目录 assembly:maven打包配置文件目录 java:源代码目录 resourc ...
- CSS布局:元素水平居中
CSS布局之元素水平居中 本文将依次介绍在不同条件下实现水平居中多种方法 一.使用 text-align: center : 适用于块级元素内部的行内元素水平居中(也适用于图片的水平居中) 此方法对i ...
- @WebInitParam注解
Servlet注解——@WebInitParam多个InitParam的写法 使用@WebInitParam配置多个InitParam,使某些页面不被拦截.在过滤器Filter.java下添加注解:@ ...
- 用Canvas实现Photoshop的钢笔工具(贝塞尔曲线)
前两天在用Canvas实现一个绘制路径的小功能.做完之后发现加以完善可以“复刻”一下PS里面的钢笔工具. PS里的钢笔工具对我来说是PS中最好用的工具! 所以本文主要介绍如何用Canvas来实现Pho ...
- CTPN
1. https://zhuanlan.zhihu.com/p/34757009 (原理) 2. https://www.jianshu.com/p/471bdbd0170d (bi-LSTM)
- 基于CAS分析对ABA问题的一点思考
基于CAS分析对ABA问题的一点思考 什么是CAS? 背景 synchronized加锁消耗太大 volatile只保证可见性,不保证原子性 基础 用CPU提供的特殊指令,可以: 自动更新共享数据; ...