sql中實現列轉行的操作有兩種方式:使用 union 操作符通過垂直合并查詢結果實現列轉行。使用 pivot 函數將列數據轉換為行數據,其中 pivot 函數的語法為:pivot ( aggregate_function(column_name) for pivot_column_name in (value1, value2, …) ) from table_name
SQL 中實現列轉行的操作
列轉行操作,也稱為“解構”或“交叉表”,是指將表中的多列數據轉換為單列行數據。在 SQL 中,可以通過 UNION 操作符或 PIVOT 函數實現此操作。
使用 UNION 操作符
UNION 操作符可以將多個查詢結果垂直合并,從而實現列轉行的效果。以下是一個示例:
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;
登錄后復制
使用 PIVOT 函數
PIVOT 函數專門用于轉換數據布局,可以將列數據轉換為行數據。其語法如下:
PIVOT ( aggregate_function(column_name) FOR pivot_column_name IN (value1, value2, ...) ) FROM table_name;
登錄后復制
其中:
aggregate_function: 要應用于轉換列數據的聚合函數,如 SUM、COUNT 或 MAX。
pivot_column_name: 用作行標頭的列名稱。
value1, value2, …: 指定要轉行的列值。
示例
假設我們有一個名為 orders 的表,其中包含以下列:
order_id
product_name
quantity
sale_date
要將 product_name 列轉行,使用 PIVOT 函數:
SELECT order_id, sale_date, SUM(quantity) AS quantity FROM orders PIVOT ( SUM(quantity) FOR product_name IN ('Product A', 'Product B', 'Product C') );
登錄后復制
這將產生以下輸出:
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 |