MS SQL 数据透视表:空源
MS SQL Pivot Tables : Empty Source
我正在尝试进行 SQL 数据透视,当主 table 中有数据时,它可以完美运行 我正在尝试进行数据透视。我已将我的问题简化为用户、主题、结果数据集。我想显示一个 table,主题为行,用户为列,单元格中这些主题的结果。它应该显示所有用户,即使他们没有结果,也应该显示所有主题,即使没有结果。我让它工作,除非根本没有结果,然后它 returns 什么都没有。我希望它仍然显示行和列,但单元格中只有空值,有什么想法吗?
参见 SQL Fiddle 示例 http://sqlfiddle.com/#!6/a1f9e/1
已更新
您需要将查询更改为:
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'
您需要左外连接以包含不匹配项。我还交换了 tables,以便将结果加入到主题中,但正如评论中指出的那样,这是一个偏好问题。关键是您需要 select Subjects.Id 而不是结果中的 ID table,如果不匹配,这将 return 什么都没有。
我正在尝试进行 SQL 数据透视,当主 table 中有数据时,它可以完美运行 我正在尝试进行数据透视。我已将我的问题简化为用户、主题、结果数据集。我想显示一个 table,主题为行,用户为列,单元格中这些主题的结果。它应该显示所有用户,即使他们没有结果,也应该显示所有主题,即使没有结果。我让它工作,除非根本没有结果,然后它 returns 什么都没有。我希望它仍然显示行和列,但单元格中只有空值,有什么想法吗?
参见 SQL Fiddle 示例 http://sqlfiddle.com/#!6/a1f9e/1
已更新
您需要将查询更改为:
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'
您需要左外连接以包含不匹配项。我还交换了 tables,以便将结果加入到主题中,但正如评论中指出的那样,这是一个偏好问题。关键是您需要 select Subjects.Id 而不是结果中的 ID table,如果不匹配,这将 return 什么都没有。