2012-01-07 3 views
1

j'ai une base de données "résultats" table avec les champs suivants:contrôles conditionnels à travers les champs de base de données

game_id, HOME_TEAM, AWAY_TEAM, HOME_TEAM_SCORE, AWAY_TEAM_SCORE, résultat

Actuellement, le champ de résultat a une possibilité de 3 valeurs, "H" (victoire à domicile), "A" (victoire par équipe à l'extérieur) ou "D" (tirage). Maintenant, au moment d'obtenir tous les résultats pour une équipe particulière, je fais une requête comme "SELECT * FROM résultats où home_team =" TEAM A "ou" away_team = "TEAM A." Et puis dans mon code, je dois vérifier si home_team est TEAM A et le résultat est H alors c'est une victoire, un tirage ou une perte etc. Y at-il un moyen de faire cette vérification dans la requête afin d'obtenir une liste de résultats similaire à

game_id, home_team , AWAY_TEAM, HOME_TEAM_SCORE, AWAY_TEAM_SCORE, résultat (soit W (victoire), l (perdre) ou D (tirage))

basé sur l'équipe qui est interrogé.

Toute aide appréciée comme ayant lutté pour les ressources sur le web.

Pour référence, il s'agit d'une base de données SQLite.

Répondre

1

Vous pouvez utiliser un case pour calculer le résultat dans 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

Les résultats sont énumérés comme 'D, A, H', non 'D, W, L';) Aussi, plus important encore, si l'équipe à l'extérieur a gagné, cela montrera une perte. – MatBailie

+0

@Dem: Vous avez raison, édité la réponse – Andomar

+0

Regarde sur place - merci beaucoup pour l'aide. – Dizzler

1

Un léger changement @ réponse de 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 
0

Vous n'avez pas spécifié le lieu (que ce soit à la maison ou à l'extérieur) mais cela semble souhaitable.

L'union des combinaisons de domicile/extérieur et W/L // D sont faciles à générer et facile à lire l'OMI:

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; 
Questions connexes