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

SQL Server中如何在Score取自[t].[overall_rank]时为gameTitle追加指定字符串?

实现方法

当然可以实现这个需求啦!我们只需要给gameTitle列加上条件判断逻辑,结合你现有的Score计算规则就能搞定。

首先先修正你原始SQL里的两处语法问题(不然实际运行会报错):一是SELECT子句中gameTitle后面缺少逗号,二是INNER JOIN没有指定表关联的ON条件。

接下来是核心的修改:利用CASE语句判断Score是否取自[t].[overall_rank]——因为你用了COALESCE,只有当前两个参数(gs.pre_season_rank和gs.season_rank)的转换结果都为NULL时,才会取第三个参数t.overall_rank作为Score的值。所以我们的判断逻辑就围绕这个点展开。

修改后的完整SQL如下:

SELECT 
    game, 
    seasonNumber, 
    leagueNumber,
    -- 条件处理gameTitle:仅当Score取自overall_rank时追加后缀
    CASE
        -- 当pre_season_rank和season_rank转换后都为NULL时,触发后缀追加
        WHEN TRY_CONVERT(VARCHAR, gs.pre_season_rank) IS NULL 
             AND TRY_CONVERT(VARCHAR, gs.season_rank) IS NULL
        THEN CONCAT(gameTitle, '_2022_Season_Final_Ranking')
        ELSE gameTitle
    END AS gameTitle,
    gameMaster AS GameLocation,
    COALESCE(TRY_CONVERT(VARCHAR, [gs].[pre_season_rank]), 
             TRY_CONVERT(VARCHAR,[gs].[season_rank]), 
             TRY_CONVERT(VARCHAR, [t].[overall_rank] )) AS Score
FROM GameStats gs
INNER JOIN Totals t
    ON gs.[你的关联字段] = t.[你的关联字段]; -- 替换为实际的表关联字段,比如game_id之类的

逻辑说明:

  • CASE语句会先检查TRY_CONVERT(VARCHAR, gs.pre_season_rank)和TRY_CONVERT(VARCHAR, gs.season_rank)是否都为NULL:这和COALESCE的执行逻辑完全匹配,只有当这两个转换结果都为空时,COALESCE才会取t.overall_rank作为Score。
  • 如果满足条件,就用CONCAT(比直接用+更安全,避免gameTitle为NULL时结果全空)把gameTitle和指定后缀拼接;否则直接返回原gameTitle。

如果你的场景中不需要考虑转换失败的情况(比如pre_season_rank和season_rank本身就是字符串类型,或者一定能转换成功),也可以简化CASE的判断条件,直接检查原字段是否为NULL:

WHEN gs.pre_season_rank IS NULL AND gs.season_rank IS NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:45:28