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
相关产品推荐
相关产品推荐

