我有一个表ClassAttendance,我正在使用MSSQL 2005
studentID attendanceDate status
-------------------------------------
*1004 2010-03-17 0
1005 2010-03-17 1
1006 2010-03-17 0
1007 2010-03-17 0
*1004 2010-03-19 0
1005 2010-03-19 1
1006 2010-03-19 0
1007 2010-03-19 0
*1004 2010-03-20 1
正如您所见,studentID是一个名为StudentData的表的外键,attendDate的行数未知。
我可以使用查询获得如下输出吗?我需要一个月内的日期为列,日期列的值将是状态列中的值。每个studentID的日期记录数与attendanceDate中未知的日期数相同。
studentID 2010-03-17 2010-03-19 2010-03-20
------------------------------------------------
1004 0 0 1
等。 这是为了创建报告,所以我需要在查询中执行此操作。如果可以,请帮忙。
答案 0 :(得分:2)
你可以使用PIVOT。看看this article。
答案 1 :(得分:1)
也许使用SQL 2005 PIVOT clause的东西? (另见:msdn)
答案 2 :(得分:1)
在报告中使用Matrix control(或在Access报告中使用CrossTab,或在客户端工具中使用等效文件)
SQL是一种固定的列定义/合同语言,您不知道您将拥有哪些列。这不是一个SQL问题,而是一个演示问题。
除非您使用动态SQL PIVOT ...而不是SQL Server 2005+ PIVOT命令再次修复,已知列