2012-04-17 31 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,添加,谢谢 – 2012-04-17 07:15:58

+0

谢谢你的帮助,我看到的演示,但有一点问题是存在的。假设主题名称是未知的,那么如何才能在演示 – 2012-04-17 07:44:38

+0

@ user1337945中这样做,如果主题列表未知,那么列标题未知,在这种情况下,您应该动态地旋转表格数据,这是一个常见问题在SQL Server中。幸运的是,这有很多解决方法。只需谷歌* SQL服务器PIVOT表与动态列*,你会发现很多有用的线程是这样的:http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265 .aspx和this:http://www.kodyaz.com/articles/t-sql-pivot-tables-in-sql-server-tutorial-with-examples.aspx – 2012-04-17 07:51:45

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