行转列或列转行写法

系统 1885 0
原文: 行转列或列转行写法

两种方式:

    /*	

实现行转列

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


  


行转列或列转行写法


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论