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

SQL查询:已按RateType='FMLY'过滤,如何添加SNGL费率列?

实现单表行转列:将不同RateType的Rate转为多列

你可以通过条件聚合或者PIVOT语法来实现需求,两种方法都能把不同RateType的费率转为同一行的不同列,不需要单独查询两次。

方法一:条件聚合(兼容性更强)

这种方法适用于所有支持SQL的数据库,通过CASE WHEN配合聚合函数提取对应类型的费率:

SELECT 
    State,
    MAX(CASE WHEN RateType = 'FMLY' THEN Rate END) AS FamilyRate,
    MAX(CASE WHEN RateType = 'SNGL' THEN Rate END) AS SingleRate
FROM UwrOTRNBaseRates
WHERE RateType IN ('FMLY', 'SNGL') -- 仅保留需要的费率类型,提升查询效率
GROUP BY State

说明:

  • WHERE RateType IN ('FMLY', 'SNGL')过滤掉不需要的数据,减少计算量
  • CASE WHEN会根据RateType匹配对应的Rate值,不匹配的返回NULL
  • MAX()聚合函数确保每个State只返回一行,自动忽略NULL值,得到对应类型的费率

方法二:使用PIVOT语法(语法更简洁)

如果你的数据库支持PIVOT(比如SQL Server、Oracle等),可以用这种更直观的方式:

SELECT 
    State,
    [FMLY] AS FamilyRate,
    [SNGL] AS SingleRate
FROM UwrOTRNBaseRates
WHERE RateType IN ('FMLY', 'SNGL')
PIVOT (
    MAX(Rate) -- 聚合函数,这里因为每个State+RateType唯一,MAX/SUM都可以
    FOR RateType IN ([FMLY], [SNGL]) -- 指定要转成列的RateType值
) AS PivotTable

说明:

  • PIVOT会自动将RateType的指定值转为列名
  • 最后通过别名把默认列名[FMLY]、[SNGL]改成你需要的FamilyRate和SingleRate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:03:08