sql中實現(xiàn)列轉(zhuǎn)行的操作有兩種方式:使用 union 操作符通過垂直合并查詢結(jié)果實現(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 中實現(xiàn)列轉(zhuǎn)行的操作
列轉(zhuǎn)行操作,也稱為“解構(gòu)”或“交叉表”,是指將表中的多列數(shù)據(jù)轉(zhuǎn)換為單列行數(shù)據(jù)。在 SQL 中,可以通過 UNION 操作符或 PIVOT 函數(shù)實現(xiàn)此操作。
使用 UNION 操作符
UNION 操作符可以將多個查詢結(jié)果垂直合并,從而實現(xiàn)列轉(zhuǎn)行的效果。以下是一個示例:
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: 用作行標頭的列名稱。
value1, value2, …: 指定要轉(zhuǎn)行的列值。
示例
假設(shè)我們有一個名為 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 |