我正在使用sql server,并且我有这3个表
学生
| id | student |
-------------
| 1 | Ronald |
| 2 | Jenny |
得分
| id | score | period | student |
| 1 | 8 | 1 | 1 |
| 2 | 9 | 2 | 1 |
期间
| id | period |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
我想要一个返回此结果的查询:
| student | score1 | score2 | score3 | score4 |
| Ronald | 8 | 9 | null | null |
| Jenny | null | null | null | null |
如您所见,分数的数量取决于时段,因为有时可能是4 o 3时段。
我不知道我是否有错误的主意,还是应该在应用程序中做到这一点,但我需要一些帮助。
我正在使用ASP.net,但现在我专注于数据库
答案 0 :(得分:0)
您需要PIVOT
数据,例如
select Y.Student, [1], [2], [3], [4]
from (
select T.Student, P.[Period], S.Score
from Students T
cross join [Periods] P
left join Scores S on S.[Period] = P.id and S.Student = T.id
) X
pivot
(
sum(Score)
for [Period] in ([1],[2],[3],[4])
) Y
参考:https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-20