2011-11-28 136 views
0

我正在为一家小型初创大学体育招聘公司创建一个数据库。基本上我想要做的是在大学水平级别将两年的高中球员统计数据提取出来,并尽可能将其显示在一行中。 (我知道这听起来很凌乱,但对于商业网站发布的缘故,我们使用的是更容易这样对我创造它。)示例表结构可以看到下面:SQL查询显示来自同一个表的多个记录?

Player ID, YearId, Points 
10, 2010, 120 
11, 2010, 90 
10, 2011, 160 
11, 2011, 173 

期望的结果:

10, 2010, 120, 2011, 160 

11, 2010, 90, 2011, 173 

我是MySQL的新手,所以任何帮助将不胜感激。

+0

是YearId实际一年? –

+0

是的。我的道歉,这正是数据库表中该字段的名称。 – BCC86

+0

然后我的答案应该给你你正在寻找的 –

回答

0

如果真的是只有两个你要找的几年,你可以加入:

SELECT t1.playerid,t1.yearid,t1.points,t2.yearid.t2.points 
FROM table t1 
LEFT JOIN table t2 
ON t1.playerid = t2.playerid 
WHERE t1.yearid = 2010 AND t2.yearid = 2011; 

如果你需要一个更灵活的方式,你可以随时使用子查询去,但我猜你会来到您想要在脚本端进行这种重构而不是在数据库中的地步。关系数据库对于这种非结构化数据只是表现不佳。

2

这会给你一个滚动的前两年,使用自动当年和以前的查询在运行时从:

SELECT p.PlayerId, p.YearId AS PreviousYear, p.Points AS PreviousPoints 
    , p2.YearId AS CurrentYear, p2.Points AS CurrentPoints 
FROM Player AS p 
LEFT JOIN Player AS p2 ON p.PlayerId = p2.PlayerId 
    AND p.YearId = p2.YearId - 1 
WHERE p2.YearId = YEAR(NOW()) 
+0

+1。你的解决方案比我的更清洁;) –

1
select 
playerid,group_concat(concat_ws(',',yearid,points) order by yearid) as merged 
from table 
where yearid >= year(curdate() - interval 1 year) 
group by playerid