日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer縱表與橫表相互轉(zhuǎn)換的方法

SQL Server中縱表與橫表相互轉(zhuǎn)換的技巧與實(shí)現(xiàn)方法

岑溪ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

在SQL Server數(shù)據(jù)庫中,我們經(jīng)常遇到數(shù)據(jù)存儲(chǔ)在縱表(Column-oriented)和橫表(Row-oriented)兩種形式,縱表通常用于存儲(chǔ)具有相同屬性類型的數(shù)據(jù),統(tǒng)計(jì)數(shù)據(jù)、日志信息等;而橫表則適用于存儲(chǔ)不同屬性類型的數(shù)據(jù),如:用戶信息、商品詳情等,在實(shí)際應(yīng)用中,我們可能會(huì)遇到需要將縱表轉(zhuǎn)換為橫表,或者將橫表轉(zhuǎn)換為縱表的需求,本篇文章將詳細(xì)介紹SQL Server中縱表與橫表相互轉(zhuǎn)換的方法。

縱表轉(zhuǎn)橫表

1、使用動(dòng)態(tài)SQL

當(dāng)我們知道縱表的結(jié)構(gòu)時(shí),可以使用動(dòng)態(tài)SQL來實(shí)現(xiàn)縱表轉(zhuǎn)橫表,以下是一個(gè)示例:

(1)創(chuàng)建示例縱表:

CREATE TABLE ZongTable
(
    ID INT,
    Year INT,
    Value INT
)
GO
INSERT INTO ZongTable VALUES (1, 2018, 100)
INSERT INTO ZongTable VALUES (1, 2019, 150)
INSERT INTO ZongTable VALUES (1, 2020, 200)
GO

(2)編寫動(dòng)態(tài)SQL:

DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'SELECT ID, '
SELECT @SQL = @SQL + N'[' + CAST(Year AS NVARCHAR(10)) + '] AS [' + CAST(Year AS NVARCHAR(10)) + '], '
FROM ZongTable
GROUP BY Year
SET @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 ZongTable
GROUP BY Year
SET @SQL = LEFT(@SQL, LEN(@SQL) - 1) + N')) AS PvtTable'
EXEC sp_executesql @SQL

2、使用PIVOT函數(shù)

當(dāng)縱表的列數(shù)量固定時(shí),可以直接使用PIVOT函數(shù)進(jìn)行縱表轉(zhuǎn)橫表:

SELECT ID,
    [2018] AS [2018],
    [2019] AS [2019],
    [2020] AS [2020]
FROM ZongTable
PIVOT (SUM(Value) FOR Year IN ([2018], [2019], [2020])) AS PvtTable

橫表轉(zhuǎn)縱表

1、使用UNION ALL

當(dāng)橫表的結(jié)構(gòu)已知時(shí),可以通過UNION ALL將橫表轉(zhuǎn)換為縱表:

CREATE TABLE HongTable
(
    ID INT,
    Year INT,
    Value INT
)
GO
INSERT INTO HongTable VALUES (1, 2018, 100)
INSERT INTO HongTable VALUES (1, 2019, 150)
INSERT INTO HongTable VALUES (1, 2020, 200)
GO
SELECT ID, 2018 AS Year, Value FROM HongTable WHERE Year = 2018
UNION ALL
SELECT ID, 2019 AS Year, Value FROM HongTable WHERE Year = 2019
UNION ALL
SELECT ID, 2020 AS Year, Value FROM HongTable WHERE Year = 2020

2、使用動(dòng)態(tài)SQL

當(dāng)橫表的列數(shù)量不固定時(shí),可以使用動(dòng)態(tài)SQL來實(shí)現(xiàn)橫表轉(zhuǎn)縱表:

DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N''
SELECT @SQL = @SQL + N'SELECT ID, ' + QUOTENAME(Year) + N' AS Year, ' + QUOTENAME(Year) + N' AS Value FROM HongTable WHERE Year = ' + CAST(Year AS NVARCHAR(10)) + N'
UNION ALL '
FROM HongTable
GROUP BY Year
SET @SQL = LEFT(@SQL, LEN(@SQL) - 10)
EXEC sp_executesql @SQL

本文介紹了SQL Server中縱表與橫表相互轉(zhuǎn)換的幾種方法,包括使用動(dòng)態(tài)SQL、PIVOT函數(shù)、UNION ALL等,這些方法在實(shí)際應(yīng)用中具有較高的實(shí)用價(jià)值,可以根據(jù)具體需求選擇合適的方法進(jìn)行數(shù)據(jù)轉(zhuǎn)換,需要注意的是,使用動(dòng)態(tài)SQL時(shí),要注意防范SQL注入風(fēng)險(xiǎn),確保數(shù)據(jù)安全。

在實(shí)際項(xiàng)目中,我們還需要根據(jù)實(shí)際情況對(duì)縱表和橫表進(jìn)行優(yōu)化,索引優(yōu)化、查詢優(yōu)化等,還可以通過編寫存儲(chǔ)過程、函數(shù)等封裝縱表與橫表轉(zhuǎn)換的邏輯,提高代碼的復(fù)用性和可維護(hù)性。

掌握縱表與橫表相互轉(zhuǎn)換的方法,有助于我們更好地應(yīng)對(duì)各種數(shù)據(jù)存儲(chǔ)和查詢需求,提高SQL Server數(shù)據(jù)庫的性能和效率,希望本文能對(duì)您在實(shí)際工作中有所幫助。


當(dāng)前文章:SQLServer縱表與橫表相互轉(zhuǎn)換的方法
轉(zhuǎn)載源于:http://m.5511xx.com/article/ccspgps.html