分组Sql表

时间:2012-09-04 08:01:14

标签: sql-server-2008 group-by

我已经加入了三张桌子..但是我必须展示它们的方式对我来说有点难以理解。我正在尝试将它们分组而不是得到理想的结果。

Sports_Name

Id |  Name
---------
1     Football
2     Cricket
3     Hockey   
4     Tenis


Teams

Id  |  Sport_Id | Team_Name
----------------------------
101      1         Manchester United
103      2         Australia
104      2         India
109      1         Real Madrid
110      3         New Zeland


Player_Name

Id  |  Team_Id |  Player_Name
------------------------------
1       101         Rooney
2       104         Tendulkar
3       103         Ponting
4       109         Ronaldo
5       101         Van Persie
6       110         Simond

我需要以下列方式显示此信息。

**Football**    
Manchester United -Rooney
Manchester United -Van Persie
Real Madrid -Ronaldo

**Cricket**
India-Tendulkar
Australia-Ponting

**Hockey**
New Zeland -Simond

and something similar for tenis

有关详细信息,请参阅此图片

enter image description here

3 个答案:

答案 0 :(得分:0)

这是你想要的吗?

SELECT sports_name.name, teams.team_name, player_name.player_name  FROM player_name
JOIN 
  teams ON
player_name.team_ID = teams.ID
JOIN 
  sports_name on
sports_name.id = teams.sport_id
order by sports_name.name, team_name

这将按顺序获取所有数据,然后您只需使用表示层将sports.name用作组标题。

这会产生

name team_name player_name
Cricket Australia Ponting
板球印度Tendulkar
足球人你鲁尼
足球人你RVP
足球皇家马德里罗纳尔多
曲棍球N Z Simond

答案 1 :(得分:0)

试试这个:

SELECT  T.TEAM_NAME+' - '+ P.PLAYER_NAME as 'FOOTBALL'
FROM    TEAMS T JOIN PLAYER_NAME P
ON      T.ID=P.TEAM_ID
JOIN    SPORTS_NAME S
ON      T.SPORT_ID=S.ID
WHERE   S.NAME='FOOTBALL'

将where子句更改为'Cricket','Hockey'以获得其他结果

答案 2 :(得分:0)

基本查询类似于:

SELECT      s.Name, t.Name, p.Player_Name
FROM        Player_Name     p
INNER JOIN  Teams       t
ON      t.Id = p.Team_id
INNER JOIN  Sports_Name s
ON      s.Id = t.Sport_Id

然后,如果你想显示你所描述的结果,我的猜测就是使用a cursor。使用parameterized procedure在查询中添加WHERE子句,以便按运动名称过滤结果。