Sql server SQL Server:使用聚合运算符COUNT()打印左表中的所有行

Sql server SQL Server:使用聚合运算符COUNT()打印左表中的所有行,sql-server,tsql,left-join,aggregate-functions,Sql Server,Tsql,Left Join,Aggregate Functions,我正在尝试编写一个查询,返回每个团队中得分低于10分的TotalPlayers,作为[LowscorlingPlayers],如果一个团队中的所有球员得分超过10分,我仍然需要打印该团队的TeamName和0作为[LowscorlingPlayers] 下面的查询提供了正确的计数,但如果一支球队中没有得分低于10分的球员,那么它将跳过打印TeamName SELECT DISTCINT (TM.[TeamId]), TM.[TeamName], COUNT(DISTINCT S

我正在尝试编写一个查询,返回每个团队中得分低于10分的
TotalPlayers
,作为
[LowscorlingPlayers]
,如果一个团队中的所有球员得分超过10分,我仍然需要打印该团队的
TeamName
和0作为
[LowscorlingPlayers]

下面的查询提供了正确的计数,但如果一支球队中没有得分低于10分的球员,那么它将跳过打印
TeamName

SELECT DISTCINT
    (TM.[TeamId]), TM.[TeamName], 
    COUNT(DISTINCT S.[PlayerId]) AS [LowScoringPlayers]
FROM 
    dbo.[Teams] TM
INNER JOIN 
    dbo.[Player] PL ON PL.[PlayerId] = TM.[TeamId]
INNER JOIN 
    dbo.[ScoreAudit] S ON S.[PlayerId] = PL.[PlayerId] AND S.[Runs] <= 10
GROUP BY 
    TM.[TeamId], TM.[TeamName]
选择DISTCINT
(TM.[TeamId]),TM.[TeamName],
将(不同的S.[PlayerId])计数为[低等级玩家]
从…起
dbo[Teams]TM
内连接
dbo.[Player]PL ON PL.[PlayerId]=TM.[TeamId]
内连接

S.[PlayerId]=PL.[PlayerId]和S.[Runs]上的dbo.[ScoreAudit]S在查询中使用
左连接
。因此,解决方案可以是:

选择DISTINCT TM.TeamId、TM.TeamName、COUNT(DISTINCT S.PlayerId)作为低等级玩家
来自dbo.Teams TM
左连接dbo.Player PL
在PL.PlayerId=TM.TeamId上
左JOIN dbo.S

在S.PlayerId=PL.PlayerId和S.Runs上,在查询中使用
LEFT JOIN
。因此,解决方案可以是:

选择DISTINCT TM.TeamId、TM.TeamName、COUNT(DISTINCT S.PlayerId)作为低等级玩家
来自dbo.Teams TM
左连接dbo.Player PL
在PL.PlayerId=TM.TeamId上
左JOIN dbo.S
在S.PlayerId=PL.PlayerId和S.Runs上