SQL┐(′ー`)┌ Server中,表橫表相縱表與橫表轉換可通過(guò)UNION、互轉換PIVOT和UNPIVOT操作實(shí)現,表橫表相便于數據在不同格式間靈活變換?;マD換
SQL Server??中縱表與橫表相互轉換的表橫表(biao)相技巧與實(shí)現方法
在SQL Server數據庫中,我們經(jīng)常遇到數據存儲在縱表(Column-orie??nted)和橫表(Row-oriented)兩種形式,互轉換縱表(biao)通常用于存儲具有相同屬性類(lèi)型的表橫表相數據,統計數據、互轉換日志(zhi)信息等;而橫表則適用于存儲不同屬性類(lèi)型的表橫表相數據,如:用戶(hù)信息、互轉換商品詳情等??,表橫表相在實(shí)際應用中,互轉換我們可(°o°)能會(huì )遇到需要將縱表轉換為橫表,表橫表相或者將橫表??轉換為縱表的互轉換需求,本篇文章將詳細介紹SQL Server中縱表┐(′д`)┌與橫表??相互轉換的表橫表相方法。
1、使用動(dòng)態(tài)SQL
當我們知道縱表的結構時(shí),可以使用動(dòng)態(tài)SQL來(lái)實(shí)現縱表轉橫表,以下是一個(gè)示例:
(1)創(chuàng )建示例縱表:
CREATE TABLE ZongTable( ID INT, Year INT, Value INT)GOIN( ?ヮ?)SERT INTO ZongTable VALUES (1, 2018, 100)INSERT INTO Zo(╯°□°)╯︵ ┻━┻ngTable VALUES (1, 2019, 150)INSERT INTO ZongTable VALUES (1, 2020, 200)GO
(2)編寫(xiě)(???)動(dòng)態(tài)SQL:
DECLARE @SQL NVARCHAR(MAX)SET @SQL = N'SELECT ID, 'SELECT @SQL = @S(′?_?`)QL + N'[' + CAST(Year AS NVARCH(╯°□°)╯︵ ┻━┻AR((???)10)) + '] AS [' + CAST(Year AS NVARCHAR(10)) + '], 'FROM ZongTableGROUP BY YearSET @SQL = LEFT(@SQL, LEN(@SQL) - 1) + N' FROM ZongTable PIVOT (SUM(Value) FOR Year IN ('SELECT @SQL = @SQL + N'[' + CAST(Year AS NVARCHAR(10)) + '], 'FROM ZongTableGR??OUP BY YearSET @SQL = LEFT(@SQL, LEN(@SQL) - 1) + N')) AS PvtTable'EXEC sp_executesql @SQL2、使用PIV(′_ゝ`)OT函數
當縱表的列數量固定時(shí),可以直接使用PIVOT函數進(jìn)行縱表轉橫表:
SEL(?????)ECT ID, [2018] AS [2018], [2019] AS [2019], [2020] AS [2020]FROM ZongTaヽ(′▽?zhuān)?ノblePIVOT (SUM(Value) FOR Year IN ([2018], [2019(???)], [2020])) AS PvtTable1、???使用UNION ALL
當橫表的結構已知時(shí),可以通過(guò)UNION?? ALL將橫表轉換為縱(╬?益?)表:
C??REATE TABLE Hongヽ(′?`)ノTable( ID INTヾ(′?`)?, Year INT, Value INT)GOINSERT INTO HongTable VALUES (1, 201?8, 100)INSERT INTO HongTable VALUES (1, 2019, 150)INSERT INTO HongTable VALUES (1, 2020, 200)GOS┐(′д`)┌ELECT ID, 2018??? AS Year, Value FROM HongTable WHERE Year = 2018UNION ALLSELECT ID, 2019 AS Yea??r??, Value FROM HongTable WHERE Year = 2019UNION ALLSELECT ID, 2020 AS Year, Value FROM(????) HongTable WHERE Year = 2020
2、使用動(dòng)態(tài)SQL
當橫表的列數量不固定時(shí),可以使用(yong)動(dòng)態(tài)SQヽ(′?`)ノL來(lái)實(shí)現橫表轉縱表:
D??EC??LARE @SQL NVARCHAR(MAX)SET @SQL = N''SELECT @SQL = @SQL + N'SELECT ID, ' + QUOTENAME(Year) + N' AS Ye(′ω`)ar, ' + QUOTENAME(Year) + N' AS Value FROM HongTable WHERE Year = ' + CAST(╯°□°)╯(Year AS NVARCHA??R(10)??) + N'(T_T)UNION ALL 'FROM HongTableGROUP BY YearSET @SQL = LEFT(@SQL, LEN??(@SQL) - 10)EXEC sp_executesql @SQL本文介紹了SQL Server中縱??表與橫表相互轉(zhuan)換的幾種方法,包括使用動(dòng)態(tài)SQL、PIVOT函數、UNION ALL等,這些方法在實(shí)際應用中具有較高的實(shí)用價(jià)值,可以根據具體需求選擇合適的方法進(jìn)行數據轉換,需要注意的是,使用動(dòng)態(tài)SQL時(shí),要注意防范SQL注入風(fēng)險,確保數據安全。
掌握縱表與橫表相互轉換的(O_O)方法,有助于我們更好地應對各種數據存儲和查詢(xún)需求,提高SQL Server數據庫的性能和效率,希望本文能對您在實(shí)際工作中有所幫助。