计算值为1的位置

195*_*950 2 sql sql-server

我得到了这个SELECT.我想计算(或总和?)玩家的黄牌和红牌(只有YellowCard = 1时才计数黄牌,而RedCard = 1时只计算红牌)..此SELECT无法正常工作.它即使有0或NULL也会计数卡.我该如何纠正它?

SELECT Firstname, Lastname, COUNT(YellowCard) AS Yellow, COUNT(RedCard) AS Red, Team.Name 
FROM PlayerMatch 
Inner join Player On PlayerMatch.PlayerId = Player.PlayerId 
INNER JOIN Team ON Player.TeamId = Team.TeamId 
INNER JOIN Match ON PlayerMatch.MatchId = Match.MatchId 
WHERE(YellowCard = 1 OR RedCard = 1) 
GROUP BY Lastname, Firstname, Name 
ORDER BY Yellow DESC
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 7

使用SUM()而不是COUNT():

SELECT Firstname, Lastname,
       SUM(YellowCard) AS Yellow, SUM(RedCard) AS Red, t.Name 
FROM PlayerMatch pm Inner join
     Player p
     On pm.PlayerId = p.PlayerId INNER JOIN
     Team t
     ON p.TeamId = t.TeamId INNER JOIN
     Match m
     ON pm.MatchId = m.MatchId 
WHERE (YellowCard = 1 OR RedCard = 1) 
GROUP BY Lastname, Firstname, Name
ORDER BY Yellow DESC;
Run Code Online (Sandbox Code Playgroud)

这假定的值YellowCardRedCard总是0或1(或NULL).这似乎是一个合理的假设.

如果不是这样,那么使用CASE:

SELECT Firstname, Lastname,
       SUM(CASE WHEN YellowCard = 1 THEN 1 ELSE 0 END) AS Yellow,
       SUM(CASE WHEN RedCard = 1 THEN 1 ELSE 0 END) AS Red,
       t.Name 
Run Code Online (Sandbox Code Playgroud)