使用数据透视表创建矩阵视图的 MySQL 查询

dim*_*oss 7 mysql pivot

我有一个包含以下字段的表:

p1
p2
s1
s2
Run Code Online (Sandbox Code Playgroud)

其中 p1 -> player1, p2 -> player2, s1 -> game1, s2 -> game2 玩家的数量可以从 3 - 10 不等。表中有他们之间的结果。例如,假设我们有 4 名球员:TIM、ROB、NICK、GEORGE 以及他们之间的比赛:

    p1     p2       s1  s2
    TIM    ROB      4   0
    NICK   GEORGE   4   0
    TIM    NICK     0   4
    ROB    GEORGE   4   0
    TIM    GEORGE   4   0
    ROB    NICK     4   0
Run Code Online (Sandbox Code Playgroud)

我想用查询产生的东西是这样的:

           TIM   ROB   NICK   GEORGE
    TIM     X    4-0   0-4     4-0
    ROB    0-4    X    4-0     4-0
    NICK   0-4   4-0    X      4-0
    GEORGE 0-4   0-4   0-4      X
Run Code Online (Sandbox Code Playgroud)

在 MySQL 中是否有可能?提前致谢。

joz*_*kjp 0

数据透视表跟踪表示例

CREATE TABLE IF NOT EXISTS `mail_track` (
`ID` int(10) NOT NULL auto_increment,
 MemberID mediumint(7) default NULL,
`MessageTitle` varchar(20) default NULL,
`Type` varchar(6) default NULL,
`URLID` varchar(15) default NULL,
`DateTime` datetime default NULL,
`IP` varchar(15) default NULL,
PRIMARY KEY  (`ID`),
KEY `DateTime` (`DateTime`,`Type`,`MessageTitle`,`MemberID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=199952834 ;
Run Code Online (Sandbox Code Playgroud)

枢轴查询

SELECT 
SUM( IF( mail_track.Type = 'Open', 1, 0 ) ) AS Opens,
SUM( IF( mail_track.Type = 'Click', 1, 0 ) ) AS Clicks,
SUM( IF( mail_track.Type = 'Sent', 1, 0 ) ) AS Sent,
DATE(DateTime)
FROM mail_track GROUP BY DATE(DateTime) 
Run Code Online (Sandbox Code Playgroud)