亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SQL?Server中的PIVOT與UNPIVOT用法具體示例詳解

 更新時(shí)間:2025年05月17日 10:57:57   作者:dotnet研習(xí)社  
這篇文章主要給大家介紹了關(guān)于SQL?Server中的PIVOT與UNPIVOT用法的具體示例,SQL?Server中PIVOT和UNPIVOT運(yùn)算符用于行列轉(zhuǎn)換,適用于報(bào)表生成與數(shù)據(jù)清洗,需要的朋友可以參考下

引言

在數(shù)據(jù)分析與報(bào)表生成場(chǎng)景中,行列轉(zhuǎn)換是一個(gè)高頻需求。SQL Server 提供了 PIVOT 和 UNPIVOT 兩個(gè)強(qiáng)大的運(yùn)算符,能夠幫助我們快速實(shí)現(xiàn)數(shù)據(jù)透視與逆透視操作。本文將結(jié)合具體示例,解析它們的核心用法。

一、PIVOT:將行轉(zhuǎn)換為列

PIVOT函數(shù)主要是用來(lái)將數(shù)據(jù)從行轉(zhuǎn)換成列。比如,如果有訂單數(shù)據(jù)表,里面有很多訂單的信息,可能按客戶(hù)ID、訂單日期等分組。使用PIVOT可以把這些重復(fù)的客戶(hù)信息排列成一個(gè)更緊湊的表格,每個(gè)客戶(hù)的訂單日期變成一列,這樣看起來(lái)更直觀。

核心作用

將某一列的唯一值作為新列名,并按需聚合關(guān)聯(lián)數(shù)據(jù)。

語(yǔ)法結(jié)構(gòu)

SELECT [非透視列], [透視列1], [透視列2], ...
FROM (
    SELECT [列1], [列2], [聚合列] 
    FROM 表
) AS 源表
PIVOT (
    聚合函數(shù)(聚合列)
    FOR [目標(biāo)列] IN ([透視值1], [透視值2], ...)
) AS 別名;

實(shí)戰(zhàn)示例

場(chǎng)景:統(tǒng)計(jì)各部門(mén)在不同季度的銷(xiāo)售額。

  • 準(zhǔn)備數(shù)據(jù)
CREATE TABLE #Sales (
    Department VARCHAR(50),
    Quarter CHAR(2),
    Amount DECIMAL(10,2)
);

INSERT INTO #Sales VALUES
('HR', 'Q1', 20000),
('HR', 'Q2', 22000),
('IT', 'Q1', 35000),
('IT', 'Q3', 41000);
  • 執(zhí)行 PIVOT
SELECT Department, [Q1], [Q2], [Q3], [Q4]
FROM (
    SELECT Department, Quarter, Amount 
    FROM #Sales
) AS Src
PIVOT (
    SUM(Amount)
    FOR Quarter IN ([Q1], [Q2], [Q3], [Q4])
) AS Pvt;

輸出結(jié)果

二、UNPIVOT:將列轉(zhuǎn)換為行

UNPIVOT函數(shù),它的作用和PIVOT相反,是用來(lái)把數(shù)據(jù)從列轉(zhuǎn)換回行。比如,在PIVOT之后得到的一張表格里,如果需要進(jìn)一步細(xì)分?jǐn)?shù)據(jù)或者進(jìn)行其他操作,可以用UNPIVOT來(lái)恢復(fù)原來(lái)的多行結(jié)構(gòu)。

核心作用

將多列合并為兩列(屬性名+屬性值),實(shí)現(xiàn)數(shù)據(jù)逆向透視。

語(yǔ)法結(jié)構(gòu)

SELECT [非透視列], [屬性列], [值列]
FROM 表
UNPIVOT (
    值列 FOR 屬性列 IN ([列1], [列2], ...)
) AS 別名;

實(shí)戰(zhàn)示例

場(chǎng)景:將季度銷(xiāo)售額列還原為行結(jié)構(gòu)。

  • 使用之前 PIVOT 的結(jié)果作為輸入
CREATE TABLE #PivotedSales (
    Department VARCHAR(50),
    Q1 DECIMAL(10,2),
    Q2 DECIMAL(10,2),
    Q3 DECIMAL(10,2),
    Q4 DECIMAL(10,2)
);

INSERT INTO #PivotedSales VALUES
('HR', 20000, 22000, NULL, NULL),
('IT', 35000, NULL, 41000, NULL);
  • 執(zhí)行 UNPIVOT
SELECT Department, Quarter, Amount
FROM #PivotedSales
UNPIVOT (
    Amount FOR Quarter IN (Q1, Q2, Q3, Q4)
) AS Unpvt;

輸出結(jié)果

三、關(guān)鍵注意事項(xiàng)

  • 數(shù)據(jù)類(lèi)型一致性UNPIVOT 的所有列必須具有兼容的數(shù)據(jù)類(lèi)型。

  • 處理 NULL 值PIVOT 會(huì)自動(dòng)過(guò)濾 NULL 值,可通過(guò) ISNULL() 或 COALESCE() 預(yù)處理。

  • 動(dòng)態(tài)列處理當(dāng)透視列值不固定時(shí),需使用動(dòng)態(tài) SQL 拼接列名(示例需另寫(xiě)代碼實(shí)現(xiàn))。

  • 性能優(yōu)化對(duì)大型數(shù)據(jù)集建議建立合適索引,避免全表掃描。

四、典型應(yīng)用場(chǎng)景對(duì)比

操作適用場(chǎng)景示例
PIVOT生成交叉報(bào)表、統(tǒng)計(jì)類(lèi)報(bào)表部門(mén)季度銷(xiāo)售匯總
UNPIVOT數(shù)據(jù)規(guī)范化、ETL預(yù)處理、存儲(chǔ)優(yōu)化將多個(gè)月份列合并為日期維度

五、總結(jié)

  • PIVOT 通過(guò)聚合實(shí)現(xiàn)行轉(zhuǎn)列,適合制作匯總視圖
  • UNPIVOT 通過(guò)逆向操作恢復(fù)數(shù)據(jù)結(jié)構(gòu),適合數(shù)據(jù)清洗
  • 二者配合使用可完成復(fù)雜數(shù)據(jù)轉(zhuǎn)換需求

到此這篇關(guān)于SQL Server中的PIVOT與UNPIVOT用法具體示例的文章就介紹到這了,更多相關(guān)SQLServer PIVOT與UNPIVOT用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SQL Server使用CROSS APPLY與OUTER APPLY實(shí)現(xiàn)連接查詢(xún)

    SQL Server使用CROSS APPLY與OUTER APPLY實(shí)現(xiàn)連接查詢(xún)

    這篇文章介紹了SQL Server使用CROSS APPLY與OUTER APPLY實(shí)現(xiàn)連接查詢(xún)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • sqlserver bcp(數(shù)據(jù)導(dǎo)入導(dǎo)出工具)一般用法與命令詳解

    sqlserver bcp(數(shù)據(jù)導(dǎo)入導(dǎo)出工具)一般用法與命令詳解

    bcp是SQL Server中負(fù)責(zé)導(dǎo)入導(dǎo)出數(shù)據(jù)的一個(gè)命令行工具,它是基于DB-Library的,并且能以并行的方式高效地導(dǎo)入導(dǎo)出大批量的數(shù)據(jù)
    2012-07-07
  • SQL Server無(wú)日志恢復(fù)數(shù)據(jù)庫(kù)(2種方法)

    SQL Server無(wú)日志恢復(fù)數(shù)據(jù)庫(kù)(2種方法)

    SQL Server數(shù)據(jù)庫(kù)中的日志文件可能會(huì)由于一些突發(fā)事件或者失誤造成丟失的嚴(yán)重后果,大家都知道,SQL Server數(shù)據(jù)庫(kù)中日志文件是很重要的,所以要及時(shí)的將丟失的日志文件給找回來(lái)。下文就為大家介紹一種恢復(fù)數(shù)據(jù)庫(kù)日志文件的方法。
    2015-08-08
  • 一步步教你建立SQL數(shù)據(jù)庫(kù)的表分區(qū)

    一步步教你建立SQL數(shù)據(jù)庫(kù)的表分區(qū)

    分區(qū)存儲(chǔ)提高了數(shù)據(jù)庫(kù)的性能,被分區(qū)存儲(chǔ)的數(shù)據(jù)物理上是多個(gè)文件,但邏輯上任然是一個(gè)表,對(duì)表的任何操作都跟沒(méi)分區(qū)之前一樣。插入、刪除、查詢(xún)、更新等操作的時(shí)候,數(shù)據(jù)庫(kù)會(huì)自動(dòng)為你找到對(duì)應(yīng)的分區(qū),然后執(zhí)行操作。
    2015-09-09
  • SQL中WHERE變量IS NULL條件導(dǎo)致全表掃描問(wèn)題的解決方法

    SQL中WHERE變量IS NULL條件導(dǎo)致全表掃描問(wèn)題的解決方法

    今天在評(píng)審接手的項(xiàng)目中的存儲(chǔ)過(guò)程時(shí),發(fā)現(xiàn)存在大量的在條件里判斷變量是否NULL的寫(xiě)法
    2013-09-09
  • 最新評(píng)論