2011-11-28 175 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 
相關問題