2014-01-28 3 views
1

Я нахожусь в процессе планирования базы данных для проекта mysql и думаю, что мне нужно решить эту проблему, прежде чем я пойду дальше.Несколько group_concat

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' и один, где Result = 'L', но мне нужны индивидуальные имена в тех же командах, которые объединены с «&». Мне также нужны команды, объединенные с ",".

Для примера выше, желаемый результат должен быть следующим:

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 команды в проигрыше. Человек в пределах одной команды объединяется с «&», а разные команды объединяются с «,». В матче 2 только 1 человек в каждой команде, поэтому особых символов не требуется. В матче 3 есть 1 команда из 2 человек как победителей, так и проигравших, поэтому они объединены с «&», без необходимости «,».

Я хотел бы написать то, с чем я потерпел неудачу, но я просто не могу найти где-нибудь рядом с тем, что мне нужно делать. Я посмотрел вниз по дороге group_concat на команды, а затем на group_concat на результат, но я не могу понять это.

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

Спасибо за любую помощь или совет, который может дать любой.

ответ

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 
+0

Ваши права. Моя вина, ленивый читал;) – danihp

+0

Эй, это сработало блестяще. Именно так, как я описал. Большое спасибо Равиндер. – user2803146

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 
; 
Смежные вопросы