SQL 如何行转列和列转行?

行转列和列转行是数据处理中常见的操作,可以使用 SQL 中的各种函数和语句来实现。

行转列:

使用 CASE WHENSUM()

假设有一张表 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 表中 Type1Type2 两种交易类型的金额分别作为 Type1_TotalType2_Total 列显示,并按 user_id 分组求和。

列转行:

使用 UNIONCASE WHEN

假设有两张表 sales_2022sales_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_2022sales_2023 表中的销售额数据分别作为 Total_Sales 列,并在结果中添加 Year 列标识年份。

另外,如果需要在结果中显示不同列的值,可以使用 CONCAT 来合并列:

SELECT 
    user_id,
    CONCAT('Type: ', transaction_type, ' - Amount: ', CAST(amount AS CHAR)) AS Transaction_Info
FROM transactions;

这将会把 transactions 表中的 user_idtransaction_typeamount 合并为一个 Transaction_Info 列,以字符串形式显示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭梓航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值