You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pivot子句实现交易员分交易所成交量的行转列统计

用PIVOT子句实现交易员按交易所成交量行转列方案

你需要的是将交易数据按「交易员分组、交易所名称转列、对应列值取总成交量」的行转列操作,使用PIVOT子句可以直接实现该需求,具体实现如下:

标准PIVOT语法实现

假设你的原始数据表名为trading_records,支持PIVOT语法的数据库(Oracle、SQL Server、PostgreSQL 12+、MySQL 8.0.19+)通用写法如下:

SELECT 
  username AS Username,
  NSE,
  BSE
  -- 剩余10+交易所列按需求顺序在这里补充即可
FROM (
  SELECT username, Exchange, totalsharestraded 
  FROM trading_records
) AS source_data
PIVOT (
  -- 聚合函数用SUM可兼容同用户同交易所有多条明细的场景,若原始数据已经是单用户单交易所的汇总值,用MAX也可得到相同结果
  SUM(totalsharestraded)
  FOR Exchange IN (
    NSE, BSE -- 这里按你需要的列顺序,把全部12+个交易所的编码列全即可
  )
) AS pivot_result
ORDER BY username;

补充说明

  • 如果你需要把无成交记录的单元格默认填充为0而不是空值,可以搭配空值处理函数修改列查询逻辑,示例:
    SELECT 
      username AS Username,
      COALESCE(NSE, 0) AS NSE,
      COALESCE(BSE, 0) AS BSE
      -- 其余交易所列按相同格式补充
    -- 后面子查询、PIVOT逻辑和上面一致
    
  • 如果交易所数量较多不想手动拼写列名,可以使用对应数据库的动态SQL语法,自动查询所有交易所名称生成IN子句内容,减少手动编写错误。
  • 如果你使用的数据库不支持PIVOT语法,可以用聚合函数加条件判断的兼容写法,效果和PIVOT完全一致:
    SELECT
      username AS Username,
      SUM(CASE WHEN Exchange = 'NSE' THEN totalsharestraded ELSE 0 END) AS NSE,
      SUM(CASE WHEN Exchange = 'BSE' THEN totalsharestraded ELSE 0 END) AS BSE
      -- 其余交易所按相同格式补充
    FROM trading_records
    GROUP BY username
    ORDER BY username;
    

内容的提问来源于stack exchange,提问作者user2381383

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:06:07