我有一个看起来像这样的表:
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
无论如何只用查询来执行此操作?修改原始表以添加空值不是一种选择。
答案 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;