【问题标题】:Conditional checks across database fields跨数据库字段的条件检查
【发布时间】:2012-01-09 19:49:40
【问题描述】:

我有一个包含以下字段的数据库“结果”表:

game_id, 主队, 客队, home_team_score, away_team_score, 结果

目前结果字段可能有 3 个值,“H”(主队获胜)、“A”(客队获胜)或“D”(平局)。现在,要获取特定团队的所有结果,我会执行类似“SELECT * FROM results where home_team = “TEAM A”或 away_team = “TEAM A”的查询。然后在我的代码中,我必须检查是否home_team 是 TEAM A,结果是 H,那么就是胜利、平局或失败等。有没有办法可以在查询中进行此检查,以便获得类似于下面的结果列表

game_id, 主队, 客队, home_team_score, away_team_score, 结果(W(赢),L(输)或D(平))

基于被查询的团队。

感谢您在网络上努力获取资源的任何帮助。

作为参考,它是一个 SQLite 数据库。

【问题讨论】:

    标签: sql database sqlite


    【解决方案1】:

    您可以使用case 在 SQL 中计算结果:

    select  *
    ,       case 
            when result = 'D' then 'D'
            when home_team = @YourTeam and result = 'H' then 'W'
            when away_team = @YourTeam and result = 'A' then 'W'
            else 'L'
            end as Outcome
    from    YourTable
    where   home_ream = @YourTeam
            or away_team = @YourTeam
    

    【讨论】:

    • 结果被枚举为D,A,H,而不是D,W,L ;) 另外,更重要的是,如果客队赢了,这将显示为输。
    【解决方案2】:

    @Andomar 的回答略有变化:)

    SELECT
      *,
      CASE
        WHEN result = 'D'                             THEN 'Draw'
        WHEN home_team = @yourTeam AND result = 'H'   THEN 'Home Win'
        WHEN home_team = @yourTeam AND result = 'A'   THEN 'Home Loss'
        WHEN result = 'H'                             THEN 'Away Loss'
        ELSE                                               'Away Win'
      END
    FROM
      YourTable
    WHERE
         home_team = @yourTeam
      OR away_team = @yourTeam
    

    【讨论】:

      【解决方案3】:

      您没有指定地点(无论是在家还是在外),但它似乎是可取的。

      home/away 和 W/L//D 组合的并集易于生成且易于阅读 IMO:

      CREATE VIEW YourView
      (
       game_id, home_team, away_team, 
       venue, outcome
      )
      AS
      SELECT game_id, 
             home_team AS your_team,               
             away_team AS opponent_team, 
             'H' AS venue, 'W' AS outcome
        FROM YourTable
       WHERE result = 'H'
      UNION
      SELECT game_id, 
             away_team AS your_team, 
             home_team AS opponent_team, 
             'A' AS venue, 'W' AS outcome
        FROM YourTable
       WHERE result = 'A'
      UNION
      SELECT game_id, 
             home_team AS your_team, 
             away_team AS opponent_team, 
             'H' AS venue, 'L' AS outcome
        FROM YourTable
       WHERE result = 'A'
      UNION
      SELECT game_id, 
             away_team AS your_team, 
             home_team AS opponent_team, 
             'A' AS venue, 'L' AS outcome
        FROM YourTable
       WHERE result = 'H'
      UNION
      SELECT game_id, 
             home_team AS your_team, 
             away_team AS opponent_team, 
             'H' AS venue, 'D' AS outcome
        FROM YourTable
       WHERE result = 'D'
      UNION
      SELECT game_id, 
             away_team AS your_team, 
             home_team AS opponent_team, 
             'A' AS venue, 'D' AS outcome
        FROM YourTable
       WHERE result = 'A';
      
       SELECT * 
         FROM YourView
        WHERE your_team = @your_team;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-26
        • 2010-12-19
        • 1970-01-01
        • 2013-08-22
        • 1970-01-01
        相关资源
        最近更新 更多