SQl行到列的转换

时间:2010-03-20 08:19:59

标签: sql sql-server-2005 tsql pivot

我有一个表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

等。 这是为了创建报告,所以我需要在查询中执行此操作。如果可以,请帮忙。

3 个答案:

答案 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命令再次修复,已知列