2010-03-20 73 views
3

我有一個表ClassAttendance和我使用的是MSSQL 2005SQl的行列轉換

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表的外鍵和attendedDate有一個未知的行數。

可以通過查詢得到如下輸出嗎?我需要一個月的日期爲列,日期列的值將是狀態列中的值。每個studentID的日期記錄數與未知的attendanceDate字段中的日期數相同。

studentID 2010-03-17 2010-03-19 2010-03-20 
------------------------------------------------  
1004   0   0   1 

等 這是一個創建報告,所以我需要做一個查詢。如果可以的話請幫忙。

回答

2

您可以使用PIVOT。看看this article

+0

是,將工作,但事情是你必須知道的字段值放手使用前那不是嗎?這裏的問題是,不知道每個月每月會插入多少日期,也不知道日期......我怎樣才能得到日期作爲列名?這個例子沒有顯示。 – Thihara 2010-03-20 11:05:04

1

也許使用SQL 2005 PIVOT clause? (參見:msdn

+0

是的,這將工作,但事情是你必須知道場手的價值之前使用,不是嗎?這裏的問題是,不知道每月會插入多少日期,並且不知道日期... – Thihara 2010-03-20 11:05:25

1

在報告中使用Matrix control(在Access報表或交叉,或等同於您的客戶端工具)

SQL是一個固定的列定義/合同語言,你不知道你會有多少列。這不是一個真正的SQL問題,而是一個演示問題。

除非你使用動態SQL PIVOT這又是固定的...不是在SQL Server 2005+轉動命令時,已知的塔

+0

Thanx夥計,但我希望它的報告,我寧願如果我可以得到結果使用查詢! – Thihara 2010-03-20 12:20:13

+0

報告意味着介紹。如果需要,可以在Excel中交叉表。但SQL不是做這件事的地方。 – gbn 2010-03-20 12:21:26