日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

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

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

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

在SQL Server數(shù)據(jù)庫(kù)中,我們經(jīng)常遇到數(shù)據(jù)存儲(chǔ)在縱表(Column-oriented)和橫表(Row-oriented)兩種形式,縱表通常用于存儲(chǔ)具有相同屬性類(lèi)型的數(shù)據(jù),統(tǒng)計(jì)數(shù)據(jù)、日志信息等;而橫表則適用于存儲(chǔ)不同屬性類(lèi)型的數(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來(lái)實(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)編寫(xiě)動(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í),可以通過(guò)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來(lái)實(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)化等,還可以通過(guò)編寫(xiě)存儲(chǔ)過(guò)程、函數(shù)等封裝縱表與橫表轉(zhuǎn)換的邏輯,提高代碼的復(fù)用性和可維護(hù)性。

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


網(wǎng)頁(yè)標(biāo)題:SQLServer縱表與橫表相互轉(zhuǎn)換的方法
分享路徑:http://www.dlmjj.cn/article/ccspgps.html