MS SQL数据透视表:空源

时间:2015-12-18 12:55:35

标签: sql-server pivot

我正在尝试做一个SQL Pivot,当我试图转动主表中的数据时,它工作得很好。我已将问题简化为用户,主题,结果数据集。我想显示一个表格,其中主题为“行”,“用户”为列,单元格中的主题为结果。它应该显示所有用户,即使他们没有结果,所有主题甚至没有结果。我有它的工作,除非根本没有结果,然后它什么都不返回。我希望它仍然显示行和列,但只是单元格中的null,Any Ideas?

请参阅SQL小提琴示例http://sqlfiddle.com/#!6/a1f9e/1

更新

This is how it should look when there are no results

1 个答案:

答案 0 :(得分:0)

您需要将查询更改为:

set @query = '
Select * From (
SELECT Subjects.ID, Subjects.Name, Results.UserID, Results.Result 
from Subjects
Left Outer join Results
On Results.SubjectID = Subjects.ID
) x pivot (max(Result) for UserID in (' + @cols + ')) p'

您需要离开外部联接以包含不匹配。我还交换了表格,以便将结果加入到主题中,但正如评论中所指出的,这是一个偏好问题。关键是你需要选择Subjects.Id而不是Results表中的ID,如果不匹配则不会返回任何内容。