多个group_concat

时间:2014-01-28 11:00:23

标签: mysql grouping group-concat

我正在为一个mysql项目规划一个数据库,并认为我需要先解决这个问题才能进一步解决。

CREATE TABLE ResultsTbl (
    EventID INTEGER,
    MatchNumber INTEGER (9),
    TeamNumber int,
    IndividualName CHAR (100),
    Result char (4)
);

INSERT INTO ResultsTbl VALUES (1,1,1,'individual 1','W');
INSERT INTO ResultsTbl VALUES (1,1,1,'individual 2','W');
INSERT INTO ResultsTbl VALUES (1,1,2,'individual 3','L');
INSERT INTO ResultsTbl VALUES (1,1,2,'individual 4','L');
INSERT INTO ResultsTbl VALUES (1,1,3,'individual 5','L');
INSERT INTO ResultsTbl VALUES (1,1,3,'individual 6','L');
INSERT INTO ResultsTbl VALUES (1,2,1,'individual 7','W');
INSERT INTO ResultsTbl VALUES (1,2,2,'individual 8','L');
INSERT INTO ResultsTbl VALUES (1,3,1,'individual 9','W');
INSERT INTO ResultsTbl VALUES (1,3,1,'individual 10','W');
INSERT INTO ResultsTbl VALUES (1,3,2,'individual 11','L');
INSERT INTO ResultsTbl VALUES (1,3,2,'individual 12','L');

所以我有一个表保存匹配数据的表。我需要最终结果为每个MatchNumber设置一个单元格,其中Result ='W',结果为'L',但我需要在同一个团队中使用“&”连接的IndividualNames。我还需要将团队与“,”联系起来。

对于上面的示例,所需的结果需要如下:

MatchNumber  |  Winners                      |   Losers 
1            |  Individual 1 & individual 2  |  individual 3 & individual 4, individual 5 & individual 6
2            |  individual 7                 |  individual 8
3            |  individual 9 & individual 10 |  individual 11 & individual 12

所以在MatchNumber 1上,我们在获胜者中有一支球队,但在输家中有两支球队。同一团队中的个人与“&”连接在一起,不同的团队与“,”连接在一起。第2场比赛每队只有1个人,因此不需要特殊字符。第3场比赛的胜负者都有1支2人组成的队伍,因此他们与“&”联系在一起。不需要“,”。

我很乐意写下我失败的内容,但我无法接近我需要做的事情。我已经看过团队中group_concat的路,然后是结果上的group_concat,但我无法理解。

我希望在处理所有数据之前处理这个问题,所以如果表格结构需要更改以完成此操作,那么我愿意接受建议。

感谢任何人给予的任何帮助或建议。

2 个答案:

答案 0 :(得分:1)

您需要按比赛号码,球队和中奖类型的第一组结果 您需要按比赛编号和获胜类型

的第二组结果
   select 
      MatchNumber,
      group_concat( Winners ) Winners,
      group_concat( Losers ) Losers
   from
      (
         select
          MatchNumber,
          TeamNumber,
          case Result when 'W'
                  then group_concat(IndividualName separator '&') end Winners,
          case Result when 'L'
                  then group_concat(IndividualName separator '&') end Losers,
          group_concat(Result separator '&') r
         from
          Resultstbl 
         group by 
          MatchNumber, TeamNumber
      ) g 
   group by MatchNumber

答案 1 :(得分:0)

给这个打击:

select MatchNumber,
  group_concat(Winners order by TeamNumber),
  group_concat(Losers order by TeamNumber)
from
(
 select MatchNumber,TeamNumber,
  group_concat(case when Result = 'W' then IndividualName end SEPARATOR " & ") as Winners,
  group_concat(case when Result = 'L' then IndividualName end SEPARATOR " & ") as Losers
  from ResultsTbl
 group by MatchNumber, TeamNumber
) t
group by MatchNumber
;