选择行和填充(空数据)

时间:2014-03-21 17:54:44

标签: sql sql-server-2008-r2 null

我有一个看起来像这样的表:

ReportID | TeamID | Inning | Runs
1          A        1        3
1          A        2        3
1          A        5        7
1          B        1        3
1          B        3        2
1          B        6        1

我需要选择所有这些数据,以及缺少局的空数据。它还需要停在两队的最大局内(即teamB的最高局是6,所以我会为teamA和teamB收集6行,总共12行。)

对于视觉,我需要查询的输出如下所示:

ReportID | TeamID | Inning | Runs
1          A        1        3
1          A        2        3
1          A        3        NULL
1          A        4        NULL
1          A        5        7
1          A        6        NULL
1          B        1        3
1          B        2        NULL
1          B        3        2
1          B        4        NULL
1          B        5        NULL
1          B        6        1

无论如何只用查询来执行此操作?修改原始表以添加空值不是一种选择。

1 个答案:

答案 0 :(得分:1)

自我加入以生成报告和团队的排列 左自连接以生成可能为空的命中。

如果在SQL之外完成,这可能会更有效率

SELECT ins.ReportID, teams.TeamID, ins.inning, score.Runs
FROM games as ins
JOIN games AS teams
    ON ins.ReportID = teams.ReportID
LEFT JOIN games AS score
    ON ins.ReportID = score.ReportID
    AND teams.TeamID = score.TeamID
    AND ins.inning = score.inning
GROUP BY ins.ReportID, teams.TeamID, ins.inning;