2012-05-05 10 views
2

私のテーブル行に列を変換するには、次のカラムがありますSQLクエリ

roll no | subject1 | subject2 | subject3 | subject4 | subject5 | subject6 
    1 | 10 | 12 | 13 | 9  | 15 | 16 
    2 | 12 | 14 | 10 | 16 | 19 | 13 
    3 | 10 | 12 | 13 | 18 | 12 | 15 
    4 | 14 | 12 | 13 | 7  | 11 | 17 

は今、私はこの形式のデータが必要になります。

Roll no | SubjectName | Marks 
    1 | subject1 | 10  
    1 | subject2 | 12  
    1 | subject3 | 13  
    1 | subject4 | 9  
    1 | subject5 | 15  
    1 | subject6 | 16  
    2 | subject1 | 12  
    2 | subject2 | 14  
    2 | subject3 | 10  
    2 | subject4 | 16  
    2 | subject5 | 19  
    2 | subject6 | 13 
    3 | subject1 | 10  
    3 | subject2 | 12  
    3 | subject3 | 13  
    3 | subject4 | 18  
    3 | subject5 | 12  
    3 | subject6 | 15 
    4 | subject1 | 14  
    4 | subject2 | 12  
    4 | subject3 | 13  
    4 | subject4 | 7  
    4 | subject5 | 11  
    4 | subject6 | 17 

あなたは、私が行として列を表示したい見ることができるように

おかげ

+2

どのデータベースおよびバージョン? –

+0

phpMyadmin 3.4、データベースはmysql – swathi

+0

@swathhi:残念ながら、MySQLは 'UNPIVOT'をサポートしていないので、おそらく' UNION ALL'アプローチを使用する必要があります。 –

答えて

5

データベースがUNPIVOTをサポートしている場合、あなたはそれを使用することができます。

ない場合は、UNION ALLを使用することができます。

SELECT roll_no, 'subject1' AS SubjectName, subject1 AS Marks FROM yourtable 
UNION ALL 
SELECT roll_no, 'subject2', subject2 FROM yourtable 
UNION ALL 
SELECT roll_no, 'subject3', subject3 FROM yourtable 
UNION ALL 
SELECT roll_no, 'subject4', subject4 FROM yourtable 
UNION ALL 
SELECT roll_no, 'subject5', subject5 FROM yourtable 
UNION ALL 
SELECT roll_no, 'subject6', subject6 FROM yourtable 
UNION ALL 
SELECT roll_no, 'subject7', subject7 FROM yourtable 
+0

値にNULLがあり、ピボットされた結果でそれらを表示したくない場合は、「where subject1 is not null」を追加するとよいでしょう。 –