SQL存储过程需求:将CASE WHEN整数值转字符串并保留胜场统计
解决方案:转换胜负显示并保留胜场统计
当然可行!这在SQL里完全能实现,咱们分两部分处理:把整数结果转成友好的文字显示,同时保留胜场数的统计——两者互不冲突,甚至可以在同一条查询里完成。
1. 把胜负整数转换为文字显示
你可以用CASE WHEN语句(或者SQL Server里的IIF函数,写法更简洁),针对每个GameResults_*列,将1替换为'Won',0替换为'Lost'。比如:
CASE WHEN GameResults_1 = 1 THEN 'Won' ELSE 'Lost' END AS Game_1_Result
如果你的结果列可能存在NULL值(比如某场比赛还没结束),可以再加个判断处理未决状态:
CASE WHEN GameResults_1 = 1 THEN 'Won' WHEN GameResults_1 = 0 THEN 'Lost' ELSE 'Pending' -- 处理未完成的比赛 END AS Game_1_Result
2. 统计用户总胜场数
因为原来的1代表胜利,0代表失败,直接对所有GameResults_*列求和就能得到总胜场数——求和时1会被计入,0不会影响结果。如果有NULL值,记得用ISNULL把它转成0,避免求和出错:
ISNULL(GameResults_1, 0) + ISNULL(GameResults_2, 0) + ISNULL(GameResults_3, 0) + ISNULL(GameResults_4, 0) + ISNULL(GameResults_5, 0) AS Total_Wins
完整示例代码
结合你提供的表结构,这里给一个可直接运行的示例:
DECLARE @commondata TABLE ( FullName VARCHAR(30), Game_1 VARCHAR(30), Game_2 VARCHAR(30), Game_3 VARCHAR(30), Game_4 VARCHAR(30), Game_5 VARCHAR(30), GameResults_1 INT, GameResults_2 INT, GameResults_3 INT, GameResults_4 INT, GameResults_5 INT ); -- 插入测试数据(模拟用户的选择和比赛结果) INSERT INTO @commondata VALUES ('Mike Nacci', 'Bills vs Dolphins', 'Chiefs vs Raiders', 'Eagles vs Cowboys', '49ers vs Seahawks', 'Packers vs Bears', 1, 0, 1, 0, 1), ('Sarah Johnson', 'Bills vs Dolphins', 'Chiefs vs Raiders', 'Eagles vs Cowboys', '49ers vs Seahawks', 'Packers vs Bears', 0, 1, 1, 1, 0); -- 最终查询:显示比赛信息、文字化结果、总胜场 SELECT FullName, -- 显示每场比赛的对阵信息和转换后的结果 Game_1, CASE WHEN GameResults_1 = 1 THEN 'Won' ELSE 'Lost' END AS Game_1_Result, Game_2, CASE WHEN GameResults_2 = 1 THEN 'Won' ELSE 'Lost' END AS Game_2_Result, Game_3, CASE WHEN GameResults_3 = 1 THEN 'Won' ELSE 'Lost' END AS Game_3_Result, Game_4, CASE WHEN GameResults_4 = 1 THEN 'Won' ELSE 'Lost' END AS Game_4_Result, Game_5, CASE WHEN GameResults_5 = 1 THEN 'Won' ELSE 'Lost' END AS Game_5_Result, -- 统计总胜场(处理可能的NULL值) ISNULL(GameResults_1,0) + ISNULL(GameResults_2,0) + ISNULL(GameResults_3,0) + ISNULL(GameResults_4,0) + ISNULL(GameResults_5,0) AS Total_Wins FROM @commondata;
这个查询会输出:
- 用户姓名
- 每场比赛的对阵信息和对应的
Won/Lost结果 - 用户的总胜场数
完全满足你的需求!
内容的提问来源于stack exchange,提问作者Mike Nacci
相关产品推荐
相关产品推荐

