2013-11-15 20 views
1

我有5个不同的表,如图中所示。如何将行转换为列并将其添加到结果集中

我可以将它们结合使用该查询,但我想添加书籍读取日志,使用书名作为列名到该表中。 我用不同的颜色在图片中显示我的表格。

select dbo.Users.name+' '+dbo.Users.surname AS name_surname, 
     dbo.Student_Facebook_Data.likes, 
     dbo.Student_Facebook_Data.posts, 
     dbo.Student_Facebook_Data.comments, 
     dbo.Attendance.absence,dbo.Attendance.physical_presence, 
     dbo.Attendance.virtual_presence 
from dbo.Users inner join dbo.Student_Facebook_Data on dbo.Users.id=dbo.Student_Facebook_Data.student_id 
inner join dbo.Attendance on dbo.Users.id=dbo.Attendance.student_id 

我试过了查询,但这些都没有解决我的问题:如果你的数据库是SQL Server 2005或更高

select dbo.Users.name+' '+dbo.Users.surname AS name_surname ,dbo.Student_Log.content_id 
from dbo.Student_Log inner join 
    dbo.Users on dbo.Student_Log.student_id=dbo.Users.id 

select distinct(material_name) 
from dbo.Material_Detail inner join 
    dbo.Student_Log on dbo.Student_Log.content_id=convert(varchar,dbo.Material_Detail.id) 

select distinct(material_name) 
from dbo.Material_Detail inner join 
    dbo.Student_Log on dbo.Student_Log.content_id=convert(varchar,dbo.Material_Detail.id) 

enter image description here

回答

0

,您可以在使用绝对不PIVOT运营商。为了清楚起见,我只显示如何显示图书的数量和使用简化的表名:

select * from (
select u.name as 'user_name', 
     b.name as 'book_name', 
     l.id as 'reading' 
from dbo.Users u 
left join dbo.RealLog l on u.id = l.user_id 
left join dbo.Books b on l.bid = b.id 
) x 
pivot (count(reading) for book_name in ([one],[two],[three],[four],[five])) as count 

PIVOT参考:http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

相关问题