我正在为一个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,但我无法理解。
我希望在处理所有数据之前处理这个问题,所以如果表格结构需要更改以完成此操作,那么我愿意接受建议。
感谢任何人给予的任何帮助或建议。
答案 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
;