行转列和列转行是数据处理中常见的操作,可以使用 SQL 中的各种函数和语句来实现。
行转列:
使用 CASE WHEN
和 SUM()
:
假设有一张表 transactions
包含了用户的交易记录,要将不同类型的交易金额作为不同的列呈现:
SELECT
user_id,
SUM(CASE WHEN transaction_type = 'Type1' THEN amount ELSE 0 END) AS Type1_Total,
SUM(CASE WHEN transaction_type = 'Type2' THEN amount ELSE 0 END) AS Type2_Total
FROM transactions
GROUP BY user_id;
这将把 transactions
表中 Type1
和 Type2
两种交易类型的金额分别作为 Type1_Total
和 Type2_Total
列显示,并按 user_id
分组求和。
列转行:
使用 UNION
和 CASE WHEN
:
假设有两张表 sales_2022
和 sales_2023
分别存储了两年的销售数据,要将两张表的数据按照年份和销售额列转为行:
SELECT '2022' AS Year, sales_amount AS Total_Sales
FROM sales_2022
UNION ALL
SELECT '2023' AS Year, sales_amount AS Total_Sales
FROM sales_2023;
这会将 sales_2022
和 sales_2023
表中的销售额数据分别作为 Total_Sales
列,并在结果中添加 Year
列标识年份。
另外,如果需要在结果中显示不同列的值,可以使用 CONCAT
来合并列:
SELECT
user_id,
CONCAT('Type: ', transaction_type, ' - Amount: ', CAST(amount AS CHAR)) AS Transaction_Info
FROM transactions;
这将会把 transactions
表中的 user_id
、transaction_type
和 amount
合并为一个 Transaction_Info
列,以字符串形式显示。