主从显示数据sql

时间:2018-11-05 00:38:53

标签: asp.net sql-server

我正在使用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,但现在我专注于数据库

1 个答案:

答案 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