开发者社区> 杰克.陈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

行转列或列转行写法

简介: 原文: 行转列或列转行写法 两种方式: /* 实现行转列 a name objec score a EN 89 a CH 78 a HO 99 b EN 34 b CH 88 b HO 66 要求输出结果...
+关注继续查看
原文: 行转列或列转行写法

两种方式:

/*	
实现行转列
a
name	objec	score
a		EN		89
a		CH		78
a		HO		99
b		EN		34
b		CH		88
b		HO		66
要求输出结果为:
name	EN	CH	HO
a		89	78	99
b		34	88	66
*/

USE tempdb
IF (SELECT 1 FROM sys.sysobjects WHERE name ='t' AND type='u') is NOT NULL 
DROP TABLE t


CREATE TABLE t
(
	NAME	CHAR(10),
	objec	CHAR(10),
	score	FLOAT
)
INSERT INTO t
VALUES('a','EN',89),('a','CH',78),('a','HO',99),('b','EN',34),('b','CH',88),('b','HO',66)

SELECT * FROM T

SELECT NAME ,MAX(CASE objec WHEN 'EN' THEN score ELSE 0 END ) EN,MAX(CASE objec WHEN 'CH' THEN score ELSE 0 END ) CH,MAX(CASE objec WHEN 'HO' THEN score ELSE 0 END ) HO
FROM t
GROUP BY NAME 
--=======================================================================================================================================================
/*	
实现行转列
a
name	objec	score
a		EN		89
a		CH		78
a		HO		99
b		EN		34
b		CH		88
b		HO		66
要求输出结果为:
name	objec		totalsorce
a		EN,CH,HO	266
b		EN,CH,HO	188
*/

USE tempdb
IF (SELECT 1 FROM sys.sysobjects WHERE name ='t' AND type='u') is NOT NULL 
DROP TABLE t

CREATE TABLE t
(
	NAME	CHAR(10),
	objec	CHAR(10),
	score	FLOAT
)
INSERT INTO t
VALUES('a','EN',89),('a','CH',78),('a','HO',99),('b','EN',34),('b','CH',88),('b','HO',66)

SELECT * FROM T

--为了去除objec中的最后一个逗号,插入一个临时表,并使用substring处理
SELECT name ,(SELECT LTRIM(RTRIM(objec))+',' FROM T WHERE objec=t.objec FOR XML PATH('')) objec,SUM(temp.score) totalscroe INTO #tmp
FROM T temp
GROUP BY name 


SELECT NAME ,SUBSTRING(objec,0,LEN(objec)-1) objec ,totalscroe
FROM #tmp


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
KMP算法(转)
KMP算法         在介绍KMP算法之前,先介绍一下BF算法。 一.BF算法     BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。
548 0
SQL行转列
SQL行转列是比较经典的问题: 比如有如下数据表,有如下某一款号(表1):    颜色  尺码  库存     红色    S    10    红色    M    80    白色    L    50    白色    S    60 要将上面的表转化为如下格式(表2):  颜...
545 0
SQL行转列
目的:将相同条件的多行值合并到同一列, 1.创建测试表: CREATE TABLE [dbo].[TB_01]( [SN] [nvarchar](50) NULL, [STEP_NAME] [nvarchar](50) NULL, [SDATE] [datetime] NULL ) ON [PRIMARY] 2.
491 0
T-SQL行转列、列转行
这是原表: 想实现这种效果: 过程我就不写了,把原代码贴给大家: 1 select (select qhmc from tab_qh c where c.qhid=b.sjqhbh) sjqh ,qhmc,a.
451 0
贪心算法:最优装载问题
/*----------------------------------------------------- 给出n个物体,第i个物体的重量为wi。 选择尽量多的物体,使得总重量不超过C。 输入: n和C以及n个整数表示的wi。
706 0
建议收藏丨sql行转列的一千种写法!!
建议收藏丨sql行转列的一千种写法!!
0 0
SQL中行转列、列转行
SQL中行转列、列转行
0 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载