这是问题所在:我有足球比赛表,每一行都有一个国家和比赛ID,例如:
ID1 Russia;
ID1 Egypt
意味着这是俄罗斯和埃及之间的比赛。但是在表格中,我仅针对进球得分的球队提供行。例如,如果表中是美国-加拿大2-0,我将拥有:
ID2 USA GOALS: 2
我有一张所有游戏的表格,其中有ID2 Canada,但没有进球。我想做的是将零目标的新表行添加到未得分的国家/地区,例如:
ID2 USA GOALS:2;
ID2 CANADA GOALS:0
但是我有点奇怪。以下是一些屏幕截图:
现在,我要检查第一张表中是否有ID和国家/地区的行,如果没有,则表示国家/地区未得分,我应该添加具有该ID,国家/地区和零目标的新行。我尝试过类似的方法,但是没有用:
select #AllCountries.Date, #AllCountries.Group, #Country, #Id, 0 as Goals
from #AllCountries inner join #CountriesWhoScored
ON #AllCountries.Id = #WhoScored.Id
WHERE #AllCountries.Id = #WhoScored.Id AND #AllCountries.Country != #WhoScored.Country
但是我得到的表中已经存在得分的国家/地区重复的行:
P.S:是SQL Server 17,我在SSMS中工作
答案 0 :(得分:4)
我认为您只需要一个left join
和coalesce()
:
select c.*, coalesce(s.Goals, 0)
from #AllCountries c
left join #CountriesWhoScored s on s.Id = c.Id and s.Country = c.Country
对于一个没有得分的国家,s.Goals
最终以null
结尾:那么您可以使用coalesce()
将其转换为0
。