MySQL是一種常用的關系型數據庫管理系統,提供了多種操作數據的方式。在實際應用中,有時需要將多列數據合并成一行,可以使用MySQL中的pivot(數據透視表)技術。
SELECT id, MAX(CASE WHEN `month` = 'January' THEN sales END) AS January, MAX(CASE WHEN `month` = 'February' THEN sales END) AS February, MAX(CASE WHEN `month` = 'March' THEN sales END) AS March, MAX(CASE WHEN `month` = 'April' THEN sales END) AS April, MAX(CASE WHEN `month` = 'May' THEN sales END) AS May, MAX(CASE WHEN `month` = 'June' THEN sales END) AS June, MAX(CASE WHEN `month` = 'July' THEN sales END) AS July, MAX(CASE WHEN `month` = 'August' THEN sales END) AS August, MAX(CASE WHEN `month` = 'September' THEN sales END) AS September, MAX(CASE WHEN `month` = 'October' THEN sales END) AS October, MAX(CASE WHEN `month` = 'November' THEN sales END) AS November, MAX(CASE WHEN `month` = 'December' THEN sales END) AS December FROM sales_table GROUP BY id;
以上代碼中,使用了CASE WHEN語句,將每個月的銷售額轉換成一列。MAX函數是為了取出最大值,這里主要是因為MONTHLY_SALES表可能會有多個行來自相同的ID和月份,如果沒有MAX函數,會產生數據沖突。
需要說明的是,上述代碼是適用于數據硬編碼的情況,一般實際場景中,數據表通常是動態變化的,這時需要使用MySQL動態SQL,可以使用預處理變量完成。MySQL動態SQL貌似學術界稱為“動態語句應用程序接口(Dynamic Statement Application Program Interface,DSAPI)”,具體可以參考相關資料。
此外,還有一種快捷的方法是使用MySQL自帶的group_concat函數,例如:
SELECT id, GROUP_CONCAT(CONCAT_WS(':', `month`, sales)) AS monthly_sales FROM sales_table GROUP BY id;
以上示例代碼中,GROUP_CONCAT函數的作用是將每行數據合并成一個字符串并用逗號分隔,CONCAT_WS是用于合并月份和銷售額的函數。
總之,MySQL多列轉一行,可以使用pivot(數據透視表)技術,也可以使用MySQL自帶的group_concat函數,具體應根據實際情況選擇。
上一篇mysql多字段主鍵
下一篇mysql 格式化數字