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*/---- ...
随机推荐
- IBM实习工作(二)
2019年秋招前夕再次到ibm项目组参加实习两周,这次主要负责的需求是建立牛奶数据池,在二级菜单建立对账单数据池,数据由Excel导入生成. 分析整个需求,主要分为以下几块: 1.牛奶数据池前台页面, ...
- 构建企业级数据湖?Azure Data Lake Storage Gen2不容错过(上)
背景 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 数据湖的核心功能, ...
- Kali Linux无法访问网络的问题
首先 ping www.baidu.com ping: unkown host www.baidu.com 然后 ping 8.8.8.8 connect:network is unreachable ...
- Zabbix-设置自动发现规则实例
一.前文 此篇文章,主要针对自动发现规则中使用snmpv2类型发现 zabbix官方解读,可当参考: https://www.zabbix.com/documentation/4.0/zh/man ...
- 小白系统篇-windows 系统安装
现阶段装系统的方法基本有几种1.硬盘安装2.光驱安装3.PE(u盘即可)安装 现在比较主流方便的用pe安装,所以我们这边就说一下PE安装系统的方法 首先我们了解下系统镜像,也就是你装系统所需得到文件( ...
- MySQL之主从同步
一.主从同步概念 1.1 什么是主从同步? MySQL 主从同步是指将数据从一个 MySQL 数据库服务器主节点复制到一个或多个从节点.MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器 ...
- MySQL之备份和还原
在实际项目中对于数据库的安全是重中之重,为防万一我们需要做好备份工作.备份分为全量备份和增量备份,今天我们就来实践下备份和还原操作. 一.为什么需要备份 在生产环境中数据库可能会遭遇到各种各样的不测从 ...
- unity_小功能实现(碰撞检测)
1.触发器Trigger:勾选IsTrigger属性 //当player刚进入触发区域的时刻发生触发检测,比如在靠近门的某个区域门一直处于开着状态 void OnTriggerEnter(Collid ...
- JVM知识点总结
JVM总体梳理 一.jvm体系总体概览 JVM体系总体分四大块:类的加载机制.jvm内存结构.GC算法 垃圾回收.GC分析 命令调优 这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点 ...
- python3 统计类的实例个数
python3 统计类的实例个数 有时候我们可能想统计下类所创建的实例个数,代码如下: class Dog: # 定义一个狗类 count = 0 # 用于统计类所创建的实例个数 def __init ...