这里有三个表
game(id,mdate,stadium,team1,team2)
goal(matchid,teamid,player,gtime)
eteam(id,teamname,coach)
如何List every match with the goals scored by each team as shown.
mdate team1 score1 team2 score2
1 July 2012 ESP 4 ITA 0
10 June 2012 ESP 1 ITA 1
10 June 2012 IRL 1 CRO 3
...
想了好久都写不出来我的代码如下
SELECT mdate,
  team1,
  CASE WHEN teamid=team1 THEN SUM(1) ELSE COUNT(*)-SUM(1) END score1,
  team2,
  CASE WHEN teamid=team2 THEN SUM(1) ELSE COUNT(*)-SUM(1) END score2
  FROM game JOIN goal ON matchid = id
  GROUP BY matchid,teamid
  ORDER BY mdate,team1; 结果:
mdate team1 score1 team2 score2
1 July 2012 ESP 4 ITA 0
10 June 2012 ESP 0 ITA 1
10 June 2012 ESP 1 ITA 0
这2,3行不知道怎么合并到一起啊,明显是场比赛,但是却显示了两行~~感激不尽啊sqljoin

解决方案 »

  1.   

    game
    id mdate stadium team1 team2
    1001 8 June 2012 National Stadium, Warsaw POL GRE
    1002 8 June 2012 Stadion Miejski (Wroclaw) RUS CZE
    1003 12 June 2012 Stadion Miejski (Wroclaw) GRE CZE
    1004 12 June 2012 National Stadium, Warsaw POL RUS
    goal
    matchid teamid player gtime
    1001 POL Robert Lewandowski 17
    1001 GRE Dimitris Salpingidis 51
    1002 RUS Alan Dzagoev 15
    1001 RUS Roman Pavlyuchenko 82eteam
    id teamname coach
    POL Poland Franciszek Smuda
    RUS Russia Dick Advocaat
    CZE Czech Republic Michal Bilek
    GRE Greece Fernando Santos
      

  2.   

    game
    id mdate stadium team1 team2
    1001 8 June 2012 National Stadium, Warsaw POL GRE
    1002 8 June 2012 Stadion Miejski (Wroclaw) RUS CZE
    1003 12 June 2012 Stadion Miejski (Wroclaw) GRE CZE
    1004 12 June 2012 National Stadium, Warsaw POL RUS
    goal
    matchid teamid player gtime
    1001 POL Robert Lewandowski 17
    1001 GRE Dimitris Salpingidis 51
    1002 RUS Alan Dzagoev 15
    1001 RUS Roman Pavlyuchenko 82eteam
    id teamname coach
    POL Poland Franciszek Smuda
    RUS Russia Dick Advocaat
    CZE Czech Republic Michal Bilek
    GRE Greece Fernando Santos
      

  3.   

    select * from
    (
    SELECT mdate,
      team1,
      CASE WHEN teamid=team1 THEN SUM(1) ELSE COUNT(*)-SUM(1) END score1,
      team2,
      CASE WHEN teamid=team2 THEN SUM(1) ELSE COUNT(*)-SUM(1) END score2
      FROM game JOIN goal ON matchid = id
      GROUP BY matchid,teamid
      ORDER BY mdate,team1
    ) t
    where not exist 
    (select 1 from 
    (
    SELECT mdate,
      team1,
      CASE WHEN teamid=team1 THEN SUM(1) ELSE COUNT(*)-SUM(1) END score1,
      team2,
      CASE WHEN teamid=team2 THEN SUM(1) ELSE COUNT(*)-SUM(1) END score2
      FROM game JOIN goal ON matchid = id
      GROUP BY matchid,teamid
      ORDER BY mdate,team1
    ) x
    where mdate=t.mdate and team1=t.team2 and team2=t.team1 and team1>team2
    )
      

  4.   

    用3楼数据,要求结果是什么贴建表及插入记录的SQL,及要求结果出来看看