原文:
行轉(zhuǎn)列或列轉(zhuǎn)行寫法
兩種方式:
/* 實現(xiàn)行轉(zhuǎn)列 a name objec score a EN 89 a CH 78 a HO 99 b EN 34 b CH 88 b HO 66 要求輸出結(jié)果為: 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 --======================================================================================================================================================= /* 實現(xiàn)行轉(zhuǎn)列 a name objec score a EN 89 a CH 78 a HO 99 b EN 34 b CH 88 b HO 66 要求輸出結(jié)果為: 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
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
