2013-07-26 16 views
1

Есть две таблицы,Использование случай, когда в SQL

table1 содержит matchid, mdate (matchdate), стадион, TEAM1, team2

table2 содержит matchid, TeamID, имя игрока, время цели (время в которой цель была забил)

Здесь team1, team2, TeamID одни и те же (СОКРАЩЕНИЯ для страны, которая играет как 'GER', 'ПОЛ', RUS»и т.д.)

Теперь мне нужно перечислить каждый матч с забитых каждой командой в виде Table3

Таблица3 будет содержать matchdate, TEAM1, score1, team2, score2

где score1 это число голы, набранные командой1, и score2 - количество голов, набранных командой2, соответственно

Я пробовал использовать этот запрос, но это дает ошибку. Любая помощь будет оценена

SELECT mdate,team1,score1,team2,score2 

    CASE WHEN teamid=team1 THEN count(gtime)=score1 ELSE 0 

    CASE WHEN teamid=team2 THEN count(gtime) ELSE 0 
    END 
FROM game JOIN goal ON table1.matchid = table2.matchid 

    group by matchid 

EDIT: qestion является запрос 13from sqlzoo.net/wiki/The_JOIN_operation Кроме того, я понял, что ошибка в моем случае, когда заявление. Спасибо всем за помощь

+0

Какая ошибка? – Elias

+1

И какой диалект SQL это? –

+0

Что вы пытаетесь сделать с этим утверждением в своем запросе: count (gtime) = score1 –

ответ

1

Как насчет:

SELECT game.mdate, 
     game.team1, 
     SUM(CASE WHEN goal.teamid=team1 THEN 1 ELSE 0 end) AS score1, 
     game.team2, 
     SUM(CASE WHEN goal.teamid=team2 THEN 1 ELSE 0 end) AS score2 
FROM game 
JOIN goal ON goal.matchid = game.id 
GROUP BY game.mdate, game.team1, game.team2 

Заставляет задуматься над тем, что происходит в случае собственной цели.

+0

будет ли это влиять на собственную цель? q есть q 13 из http://sqlzoo.net/wiki/The_JOIN_operation – Naga

+0

вы взглянули на URL-адрес? теперь вы могли бы объяснить далее данные о своей цели? – Naga

+0

@Naga Поскольку вы сортируете по команде, собственные цели не должны влиять на нее (я предполагаю, что у них будет игрок другой команды). Сказанное: если никакие цели не забиты, исходный запрос, который я дал, не должен работать. Однако левое соединение должно исправить это. – Sam

0

Если вы хотите получить результат в 2 столбцах, вам не хватает запятой, иначе ваш синтаксис неверен. Вам не нужно второй «случай» слово

SELECT CASE WHEN 1=1 THEN 'equal' when 1=3 THEN 'not equal' END 
+0

Что мне это поможет? – Naga

+0

вот пример того, как написать запрос – Diego

+0

oh ok, но как я могу его использовать, чтобы получить цели, забитые командой в матче здесь? – Naga

0

сделать некоторые предположения о том, что вы после того, как из-за отсутствия ясности в вопросе, но, возможно, вы желая что-то вроде этого:

SELECT mdate,team1,score1,team2,score2 
    ,SUM(CASE WHEN teamid=team1 THEN 1 ELSE 0 END) 
    ,SUM(CASE WHEN teamid=team2 THEN 1 ELSE 0 END) 
FROM game 
JOIN goal 
    ON matchid = id 
0

Я думаю, что самый простой способ подумать об этом заключается в объединении таблицы goal, чтобы получить результаты для каждой команды независимо (для каждой игры). Затем присоединитесь к таблице game, чтобы получить нужный результат:

SELECT m.mdate, m.team1, g1.score, m.team2, g2.score 
FROM game JOIN 
    (select matchid, teamid, count(*) as score 
     from goal 
     group by matchid, teamid 
    ) g1 
    ON g2.matchid = game.matchid and 
     g1.teamid = game.team1 join 
    (select matchid, teamid, count(*) as score 
     from goal 
     group by matchid, teamid 
    ) g2 
    ON g2.matchid = game.matchid and 
     g2.teamid = game.team2; 
Смежные вопросы