我正在編寫一個網頁,以舊的成績簿格式顯示學生成績,也就是說,它會顯示學生姓名,然後顯示每個作業的成績(連續)然後爲每個學生重複一行。我的表設置如下(縮短到必要的信息):Sybase SQL動態選擇(加入?)關係數據庫
表:分配
* Assignment_PK(主鍵)
* ASSIGNMENT_NAME
表:學生
* Student_PK(主鍵)
* Student_Name
表:StudentAssignment
* SA_PK(主鍵
* Student_FK(Student.Student_P K)
* Assignment_FK(Assignment.Assignment_PK)
*分數
我試圖寫一個SELECT語句,將打印學生的名字和分數每項任務。我遇到的問題是,如果我將SELECT Score列作爲列,我只能得到一個賦值的分數,因爲在我的WHERE Assignment_FK = Assignment_PK中只允許我爲列選擇一個分數。
我對關係型數據庫相當陌生,我真的可以用最好的方式來解決這個問題。一個建議是,我編寫了一個SELECT語句,將所有學生選入一個表格,然後在表格中做一個foreach行,並讓它選擇分數並將它們放在適當的列中。這似乎是一個緩慢而不必要的過程。有沒有更簡單的方法使用JOINS?或者寫一個更好的SELECT?
查找PIVOT表。如果你事先知道分配的數量,這很容易......(這是一個大的IF)。 – Randy 2011-04-05 18:06:38
一個PIVOT表正是我所需要的。我可以做一個初步的查詢,以提前獲得分配的數量。 Sybase沒有內置的PIVOT或TRANSFORM功能。相反,我必須加載所有數據,然後編寫一個C#對象來讀取數據,並以我想要的格式進行轉換和顯示。如果Sybase支持它,那麼一個PIVOT表可以很好地工作。 – Genzume 2011-04-11 19:10:03