MySQL将行结果组合成一个新列

时间:2011-01-26 23:53:18

标签: sql mysql vb.net datagrid

我正在尝试设置查询以将数据返回到VB.Net数据网格。我想将结果汇总到一个新列中,如下所示:

例如,在Match-no:

Date     Sponsor    Match_no     Team
---------------------------------------
1-1-11     Nike        1         Tigers
1-1-11     Nike        1         Bears
2-1-11     Crisco      2         Llamas
2-1-11     Crisco      2         Tigers 

将其翻到新列。

Date     Sponsor    Match_no     Teams_playing
---------------------------------------------------
1-1-11    Nike         1          Tigers vs Bears
2-1-11    Crisco       2          Llamas vs Tigers

我尝试使用“group_concat”,但出于某种原因,无论match_no如何,它都将团队中的整个列表汇总到一个列中。

在此示例中,将有4个表:

Dates        Sponsors           Match          Team
------       --------         -------        --------
Date_id      Sponsor_id         Match_id       Team_id
Date         Sponsor_name       Match_no       Team_name
                                Sponsor_id     Match_id

2 个答案:

答案 0 :(得分:1)

尝试:

  SELECT m.date,
         m.sponsor,
         m.match_no,
         GROUP_CONCAT(m.team, SEPARATOR ' vs ')
    FROM MATCH_NO m
GROUP BY m.date, m.sponsor, m.match_no

答案 1 :(得分:0)

您的表格结构看起来很可疑。日期与Match没有对应关系。团队应该在一个带有桥梁的单独表中:

match_team
-----------
match_id
team_id

或者如果每场比赛只有两支球队,那么只需

match
---------
match_id
Match_no
sponsor_id
date_id
team_id_a
team_id_b

通常,人们不会创建只包含id和日期的日期表,例如它无法帮助按日期索引或搜索匹配表。

对于您的原始问题,查询将是

select d.date, s.sponsor_name, m.match_no,
    group_concat(teams_playing separator ' vs ') Teams_playing
from match m
inner join dates d on d.date_id = m.date_id
inner join sponsors s on s.sponsor_id = m.sponsor_id
inner join team t on t.match_id = m.match_id
group by m.match_id, d.date, s.sponsor_name, m.match_no

参考:GROUP_CONCAT