SQL中PIVOT函數(shù)的用法小結(jié)
前言
PIVOT 是 SQL Server 中的一個(gè)功能,用于將行轉(zhuǎn)換為列。然而,MySQL 和 Oracle 不直接支持 PIVOT 語(yǔ)法。但是,你可以使用條件聚合或其他技術(shù)來(lái)模擬 PIVOT 的行為。
語(yǔ)法:
-- 從子查詢中選擇數(shù)據(jù),子查詢從源表中選擇需要的數(shù)據(jù) SELECT ... FROM ( -- 源查詢,從源表中選取你希望進(jìn)行PIVOT操作的列 SELECT ... FROM <source_table> -- 可以包含WHERE子句、GROUP BY子句等以篩選或組織數(shù)據(jù) ) AS SourceTable -- PIVOT操作,將行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù) PIVOT ( -- 聚合函數(shù),用于計(jì)算每個(gè)新列的值 aggregate_function(<column_value>) -- 指定要進(jìn)行轉(zhuǎn)換的列名 FOR <column_name> -- 指定轉(zhuǎn)換后新列的名稱列表 IN ([first_pivoted_column], [second_pivoted_column], ...) ) AS PivotTable;
以下是如何在 SQL Server、MySQL 和 Oracle 中實(shí)現(xiàn)類似 PIVOT 的操作的示例。
1. SQL Server
假設(shè)你有一個(gè)名為 sales 的表,其中包含 year, product, 和 amount 三個(gè)字段:
sql:
CREATE TABLE sales ( year INT, product VARCHAR(50), amount DECIMAL(10, 2) ); INSERT INTO sales (year, product, amount) VALUES (2020, 'A', 100), (2020, 'B', 200), (2021, 'A', 150), (2021, 'B', 250);
你可以使用 PIVOT 來(lái)轉(zhuǎn)換數(shù)據(jù):
SELECT * FROM ( SELECT year, product, amount FROM sales ) AS source_table PIVOT ( SUM(amount) FOR product IN ([A], [B]) ) AS pivot_table;
這將返回:
year | A | B |
---|---|---|
2020 | 100.0 | 200.0 |
2021 | 150.0 | 250.0 |
2. MySQL
在 MySQL 中,你可以使用條件聚合來(lái)模擬 PIVOT:
SELECT year, SUM(CASE WHEN product = 'A' THEN amount ELSE 0 END) AS 'A', SUM(CASE WHEN product = 'B' THEN amount ELSE 0 END) AS 'B' FROM sales GROUP BY year;
這將返回與 SQL Server 相同的結(jié)果。
3. Oracle
在 Oracle 中,你也可以使用條件聚合:
SELECT year, SUM(CASE WHEN product = 'A' THEN amount ELSE 0 END) AS "A", SUM(CASE WHEN product = 'B' THEN amount ELSE 0 END) AS "B" FROM sales GROUP BY year;
這將返回與 SQL Server 和 MySQL 相同的結(jié)果。
請(qǐng)注意,雖然上述查詢?cè)谶壿嬌夏M了 PIVOT 的行為,但它們并不是真正的 PIVOT 語(yǔ)法。如果你需要在多個(gè)列或動(dòng)態(tài)列上進(jìn)行轉(zhuǎn)換,那么你可能需要構(gòu)建更復(fù)雜的查詢或使用存儲(chǔ)過(guò)程來(lái)動(dòng)態(tài)生成 SQL。
到此這篇關(guān)于SQL中PIVOT函數(shù)的用法小結(jié)的文章就介紹到這了,更多相關(guān)SQL PIVOT函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 關(guān)于SQL中PIVOT函數(shù)的使用方法詳解
- SQL Server使用PIVOT與unPIVOT實(shí)現(xiàn)行列轉(zhuǎn)換
- SQL Server 使用 Pivot 和 UnPivot 實(shí)現(xiàn)行列轉(zhuǎn)換的問(wèn)題小結(jié)
- sql server通過(guò)pivot對(duì)數(shù)據(jù)進(jìn)行行列轉(zhuǎn)換的方法
- 行轉(zhuǎn)列之SQL SERVER PIVOT與用法詳解
- SQL基礎(chǔ)教程之行轉(zhuǎn)列Pivot函數(shù)
- SQL知識(shí)點(diǎn)之列轉(zhuǎn)行Unpivot函數(shù)
- 深入SQL中PIVOT 行列轉(zhuǎn)換詳解
相關(guān)文章
SQL Server根據(jù)分區(qū)表名查找所在的文件及文件組實(shí)現(xiàn)腳本
這篇文章主要介紹了SQL Server根據(jù)分區(qū)表名查找所在的文件及文件組實(shí)現(xiàn)腳本,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-07-07SQL Server中的排名函數(shù)與分析函數(shù)詳解
本文詳細(xì)講解了SQL Server中的排名函數(shù)與分析函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05根據(jù)sql腳本修改數(shù)據(jù)庫(kù)表結(jié)構(gòu)的幾種解決方案
這篇文章主要介紹了如何根據(jù)sql腳本修改數(shù)據(jù)庫(kù)表結(jié)構(gòu),需要的朋友可以參考下2014-05-05SQL Server 獲取服務(wù)器時(shí)間的sql語(yǔ)句
這篇文章主要介紹了SQL Server 獲取服務(wù)器時(shí)間的sql語(yǔ)句,需要的朋友可以參考下2016-07-07sqlserver 字段值拼接的實(shí)現(xiàn)示例
拼接字段可以通過(guò)多種方法實(shí)現(xiàn),本文主要介紹了sqlserver字段值拼接的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07sql根據(jù)表名獲取字段及對(duì)應(yīng)說(shuō)明
sql根據(jù)表名獲取字段及對(duì)應(yīng)說(shuō)明,需要的朋友可以參考下。2010-09-09Activiti-Explorer使用sql server數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法
本文主要介紹Activiti-Explorer使用sql server數(shù)據(jù)庫(kù),這里整理了詳細(xì)的資料來(lái)說(shuō)明Activiti-Explorer使用SQL Server的實(shí)例,有興趣的小伙伴可以參考下2016-08-08sql server2012附加數(shù)據(jù)庫(kù)問(wèn)題解決方法
這篇文章主要介紹了sql server2012附加數(shù)據(jù)庫(kù)問(wèn)題解決方法,需要的朋友可以參考下2014-05-05