Условные проверки по полям базы данных - PullRequest
1 голос
/ 07 января 2012

У меня есть таблица «результатов» базы данных со следующими полями:

game_id, Домашняя команда, AWAY_TEAM, HOME_TEAM_SCORE, AWAY_TEAM_SCORE, результат

В настоящее время поле результата может иметь 3 значения: «H» (победа хозяев), «A» (победа гостей) или «D» (ничья). Сейчас, чтобы получить все результаты для конкретной команды, я делаю запрос типа «SELECT * FROM results, где home_team =« TEAM A »или away_team =« TEAM A ». И затем внутри своего кода я должен проверить, home_team - это команда A, а результат - H, тогда это выигрыш, ничья или поражение и т. д. Есть ли способ выполнить эту проверку в запросе, чтобы получить список результатов, аналогичный приведенному ниже

game_id, Домашняя команда, AWAY_TEAM, HOME_TEAM_SCORE, AWAY_TEAM_SCORE, результат (W (победа), L (проигрыш) или D (ничья))

на основе команды, которая запрашивается.

Любая помощь оценивается как борьба за ресурсы в сети.

Для справки это база данных SQLite.

Ответы [ 3 ]

1 голос
/ 07 января 2012

Небольшое изменение в ответ @ 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
1 голос
/ 07 января 2012

Вы можете использовать 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
0 голосов
/ 09 января 2012

Вы не указали место проведения (дома или в гостях), но это кажется желательным.

Объединение комбинаций дома / в гостях и W / L // D легко генерируется и легко читается.ИМО:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...