2015-06-24 64 views
1

我現在有一個具有以下格式的數據庫:轉換MYSQL數據庫的行轉換成列

ID | Year | Name | Address | Penalty 
1  | 2015 | Test 1 | Test 1  |  0.2 
2  | 2014 | Test 1 | Test 1  |  0.3 
3  | 2013 | Test 1 | Test 1  |  0.4 
4  | 2015 | Test 2 | Test 2  |  0.5 
5  | 2014 | Test 2 | Test 2  |  0.6 
6  | 2015 | Test 3 | Test 3  |  0.7 

我所試圖做的是編寫一個查詢,將產生類似這樣的格式:

ID | Name | Address | 2015Penalty | 2014Penalty | 2013Penalty 
1  | Test 1 | Test 1  |  0.2  |  0.3  |  0.4 
2  | Test 1 | Test 1  |  0.5  |  0.6  |  0.2 
3  | Test 1 | Test 1  |  0.7  |  0.8  |  0.3 

基本上,每個公司每年都會有一排,每個公司需要一排,然後是每年罰款的一列。

這可能嗎?我想如果可能的話完全做到這一點在SQL因爲行基本上得到了回顯到一個頁面,它成爲一個Excel電子表格:

while($row = mysqli_fetch_assoc($res)) { 
    if(!$flag) { 
     // display field/column names as first row 
     echo implode("\t", array_keys($row)) . "\r\n"; 
     $flag = true; 
    } 
    array_walk($row, 'cleanData'); 
    echo implode("\t", array_values($row)) . "\r\n"; 
} 

我一直想看看是否有辦法做在PHP中,但我不知道如何做到這一點,所以任何幫助,不勝感激。如果需要進一步澄清,請告訴我。

編輯

我也許應該更具體,這樣的列會自動生成基於這些年來,因爲每年有數據已導入,然後SQL必須,我想它也會更新。如果有辦法讓這個自動化,那會好很多。

+2

你描述的被稱爲*旋轉*,供您參考。 –

+0

我不知道!對於SQL查詢,有點初學者,現在轉到谷歌,謝謝。 –

+0

這麼多行話,這麼短的時間! –

回答

1

爲此,您可以使用條件彙總:

select id, name, address, 
     max(case when year = 2015 then penalty end) as penalty2015, 
     max(case when year = 2014 then penalty end) as penalty2014 
from table t 
group by id, name, address; 
+0

如果年份不能保證在那裏,這項工作是否會進行?另外,我是否必須爲每一個可能的年份編寫一個新的'max',或者是否有辦法使它自動化? –

+0

@BrandonShega。 。 。事實上,是的。當年不存在時,它會給出'NULL'的值。如果你想要0,你可以添加'else 0'。 –

+0

我在上面編輯了我的問題,道歉,但無論如何它會根據年份生成列標題,而不是每年都創建一個案例? –