sql中實(shí)現(xiàn)列轉(zhuǎn)行的操作有兩種方式:使用 union 操作符通過垂直合并查詢結(jié)果實(shí)現(xiàn)列轉(zhuǎn)行。使用 pivot 函數(shù)將列數(shù)據(jù)轉(zhuǎn)換為行數(shù)據(jù),其中 pivot 函數(shù)的語法為:pivot ( aggregate_function(column_name) for pivot_column_name in (value1, value2, …) ) from table_name
SQL 中實(shí)現(xiàn)列轉(zhuǎn)行的操作
列轉(zhuǎn)行操作,也稱為“解構(gòu)”或“交叉表”,是指將表中的多列數(shù)據(jù)轉(zhuǎn)換為單列行數(shù)據(jù)。在 SQL 中,可以通過 UNION 操作符或 PIVOT 函數(shù)實(shí)現(xiàn)此操作。
使用 UNION 操作符
UNION 操作符可以將多個(gè)查詢結(jié)果垂直合并,從而實(shí)現(xiàn)列轉(zhuǎn)行的效果。以下是一個(gè)示例:
SELECT * FROM table_name UNION SELECT * FROM table_name WHERE column_name1 IS NOT NULL UNION SELECT * FROM table_name WHERE column_name2 IS NOT NULL;
登錄后復(fù)制
使用 PIVOT 函數(shù)
PIVOT 函數(shù)專門用于轉(zhuǎn)換數(shù)據(jù)布局,可以將列數(shù)據(jù)轉(zhuǎn)換為行數(shù)據(jù)。其語法如下:
PIVOT ( aggregate_function(column_name) FOR pivot_column_name IN (value1, value2, ...) ) FROM table_name;
登錄后復(fù)制
其中:
aggregate_function: 要應(yīng)用于轉(zhuǎn)換列數(shù)據(jù)的聚合函數(shù),如 SUM、COUNT 或 MAX。
pivot_column_name: 用作行標(biāo)頭的列名稱。
value1, value2, …: 指定要轉(zhuǎn)行的列值。
示例
假設(shè)我們有一個(gè)名為 orders 的表,其中包含以下列:
order_id
product_name
quantity
sale_date
要將 product_name 列轉(zhuǎn)行,使用 PIVOT 函數(shù):
SELECT
order_id,
sale_date,
SUM(quantity) AS quantity
FROM orders
PIVOT (
SUM(quantity)
FOR product_name IN ('Product A', 'Product B', 'Product C')
);
登錄后復(fù)制
這將產(chǎn)生以下輸出:
| order_id | sale_date | quantity_Product A | quantity_Product B | quantity_Product C |
|---|---|---|---|---|
| 1 | 2023-01-01 | 10 | 15 | 20 |
| 2 | 2023-01-02 | 5 | 10 | 15 |






