SQL如何實(shí)現(xiàn)橫表與縱表相互轉(zhuǎn)換
一、橫表簡單概述
橫表是普通的建表方式。例如:表結(jié)構(gòu)為主鍵、字段1、字段2、字段3…。
二、縱表簡單概述
縱表的表結(jié)構(gòu)為主鍵、字段代碼、字段值,字段代碼則為字段1、字段2、字段3…。
三、縱表轉(zhuǎn)橫表代碼如下以及視圖展示
1.縱表視圖如下:
2.縱表轉(zhuǎn)換成橫表視圖如下:
3.sql語句如下所示:
select student_name, sum(case ts.subject when 'C語言' then ts.score else '' end) as C語言, sum(case ts.subject when '數(shù)據(jù)結(jié)構(gòu)' then ts.score else '' end) as 數(shù)據(jù)結(jié)構(gòu), sum(case ts.subject when '操作系統(tǒng)' then ts.score else '' end) as 操作系統(tǒng) from t_student ts group by ts.student_name;
四、橫表轉(zhuǎn)縱表代碼如下以及視圖展示
1.橫表視圖如下:
2.橫表轉(zhuǎn)換成縱表視圖如下:
3.sql語句如下所示:
select ts.studnet_name, 'C語言' as 科目, ts.`C語言` as 成績 from t_student1 ts union all select ts.studnet_name, '數(shù)據(jù)結(jié)構(gòu)' as 科目, ts.`數(shù)據(jù)結(jié)構(gòu)` as 成績 from t_student1 ts union all select ts.studnet_name, '操作系統(tǒng)' as 科目, ts.`操作系統(tǒng)` as 成績 from t_student1 ts order by studnet_name,科目
五、橫表、縱表優(yōu)點(diǎn)與缺點(diǎn)
1.橫表
優(yōu)點(diǎn):一行表示了一個實(shí)體記錄,清晰可見。
缺點(diǎn):如果現(xiàn)在要給這個表加一個字段,那么就必須重建表結(jié)構(gòu)。
2.縱表
優(yōu)點(diǎn):如果現(xiàn)在要給這個表加一個字段,只需要添加一些記錄。
缺點(diǎn):數(shù)據(jù)描述不是很清晰,而且會造成數(shù)據(jù)庫數(shù)據(jù)很多。另如果需要分組統(tǒng)計(jì),要先group by,較繁瑣
六、總結(jié)
應(yīng)該把不容易改動表結(jié)構(gòu)的設(shè)計(jì)成橫表,把容易經(jīng)常改動不確定的表結(jié)構(gòu)設(shè)計(jì)成縱表。
到此這篇關(guān)于SQL如何實(shí)現(xiàn)橫表與縱表相互轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)SQL 橫表與縱表轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL Server中使用Trigger監(jiān)控存儲過程更改腳本實(shí)例
這篇文章主要介紹了SQL Server中使用Trigger監(jiān)控存儲過程更改腳本實(shí)例,本文使用一個表來記錄存儲過程更改過程,需要的朋友可以參考下2015-07-07Sql Server 創(chuàng)建數(shù)據(jù)庫腳本Create DATABASE
這篇文章主要介紹了Sql Server 創(chuàng)建數(shù)據(jù)庫腳本語句Create DATABASE的使用,需要的朋友可以參考下2014-08-08SQL Server中利用正則表達(dá)式替換字符串的方法
這篇文章主要介紹了SQL Server中利用正則表達(dá)式替換字符串的方法,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03數(shù)據(jù)庫中identity字段不必是系統(tǒng)產(chǎn)生的唯一值 性能優(yōu)化方法(新招)
具有identity特性的字段,其值是系統(tǒng)產(chǎn)生的,自動增加的,所以,一般把這個用在一個表的主鍵上。2011-09-09Excel導(dǎo)入Sqlserver數(shù)據(jù)庫腳本
簡單但很實(shí)用的一段SQL腳本,相信大家在做新舊系統(tǒng)升級時(shí)會經(jīng)常用到.2009-10-10