2012-04-17 2 views
1

私の問題はthis questionのようですが、私は別のテーブルからデータを取得しています:複数行

Name ID Subject-name obtained-marks 
gumman 9 English    3 
gumman 9 Islamic-Studies  4 
gumman 9 Pak Studies   3 

私はこのような出力たい:私はこれをどのように行うことができます

ID Name English Islamic-Studies Pak-studies 
9 gumman 3    4    3 

を?

答えて

2

これを試してみてください:

Select s.ID, s.Name, 
     MAX(case WHEN s.SubjectName = 'English'   THEN s.ObtainedMarks end) as 'English', 
     MAX(case WHEN s.SubjectName = 'Islamic-Studies' THEN s.ObtainedMarks end) as 'Islamic-Studies', 
     MAX(case WHEN s.SubjectName = 'Pak Studies'  THEN s.ObtainedMarks end) as 'Pak-studies' 
From Students s 
GROUP BY s.ID, s.Name 

DEMO

+0

@BogdanSahlean、追加、おかげ –

+0

は、私はデモを参照してください、あなたの助けをありがとうございましたが、少し問題があります。サブジェクト名が不明なので、デモでどうすればいいのでしょうか? –

+0

@ user1337945、サブジェクトのリストが不明な場合は、列のヘッダーが不明なため、テーブルデータを動的にピボットする必要があります。 SQL Serverで。幸いにも、これのための回避策がたくさんあります。 * SQL ServerのPIVOTテーブルをダイナミックな列で*検索すると、このような便利なスレッドがたくさん見つかります。http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265 .aspx、これはhttp://www.kodyaz.com/articles/t-sql-pivot-tables-in-sql-server-tutorial-with-examples.aspx –

4
select ID, 
     Name, 
     [English], 
     [Islamic-Studies], 
     [Pak Studies] 
from YourTable 
pivot 
    (
    min([obtained-marks]) for [Subject-name] in ([English], 
               [Islamic-Studies], 
               [Pak Studies]) 
) as P