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*/---- ...
随机推荐
- java并发编程(二十六)----ThreadLocal的使用
其实ThreadLocal很多接触过多线程的同学都可能会很陌生,他不像current包里面那些耳熟能详的api一样在我们面前经常出现,更多的他作为一个本地类出现在系统设计里面.我们可以说一下Sprin ...
- exported function xxx should have comment or be unexported
0x00 问题 exported function xxx should have comment or be unexported. 0x01 解决 https://golang.org/s/sty ...
- (二十四)c#Winform自定义控件-单标题窗体
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- 8.7 day28 网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块
前置知识:不同计算机程序之间的数据传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- lumen错误 NotFoundHttpException in RoutesRequests.php line 442:
解决:进入 public/index.PHP 将 $app->run(); 修改成下面的: $request = Illuminate\Http\Request::capture(); $app ...
- 构建企业级数据湖?Azure Data Lake Storage Gen2不容错过(上)
背景 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 数据湖的核心功能, ...
- JDK集合面试20问
1. HashMap的内部实现原理是什么? HashMap内部实现原理是数组+链表,通过散列算法将key值散列到数组中,如果到相同的位置,则通过拉链法解决散列冲突.在JDK8中新增了红黑树结构,当Ha ...
- Docker 方式部署 Solo 博客系统总结
此篇为Docker部署方式,另有Tomcat部署方式,请参考文章<Tomcat 方式部署 Solo 博客系统总结> 最近搭建了一个博客系统,作为自己的主页,方便记录一些平时所见所闻 ...
- net core Webapi基础工程搭建(六)——数据库操作_Part 2
目录 前言 开始 使用 小结 前言 昨天是写着写着发现,时间不早了,已经养成了晚上下班抽时间看看能写点儿啥的习惯(貌似),今天实在是不想让昨天没做完的事情影响,所以又坐下,沉下心(周末了),开始把数据 ...
- 消息中间件——RabbitMQ(六)理解Exchange交换机核心概念!
前言 来了解RabbitMQ一个重要的概念:Exchange交换机 1. Exchange概念 Exchange:接收消息,并根据路由键转发消息所绑定的队列. 蓝色框:客户端发送消息至交换机,通过路由 ...