我使用的是SQL Server 2008
我正在尝试计算任何给定自行车的输赢。每次用户投票时,他都会投票支持一辆自行车(1),并投票反对另一辆自行车(0)。
我的投票表如下所示:
VoteID --- BikeID ---- Vote
1 100 1
2 101 0
3 100 0
4 101 1
5 102 1
6 100 0
7 102 0
8 101 1当我对特定自行车运行查询时,我希望我的结果如下所示
Wins -- Losses
5 6现在,我的结果如下所示:
Wins --- Losses
5 NULL
NULL 6 我的查询如下所示:
SELECT SUM(CASE WHEN Vote = 1 THEN 1 END) AS Wins,
SUM(CASE WHEN Vote = 0 THEN 1 END) AS Losses
FROM Votes
WHERE BikeID = 101
GROUP BY Vote我需要做什么才能在一行上得到结果?
发布于 2012-01-08 02:29:28
SELECT SUM(CASE WHEN Vote = 1 THEN 1 ELSE 0 END) AS Wins,
SUM(CASE WHEN Vote = 0 THEN 1 ELSE 0 END) AS Losses
FROM Votes
WHERE BikeID = 101问题是您的case语句没有涵盖所有条件,因此对于没有考虑到的情况返回null。
此外,您不需要group by vote,因为您实际上并没有在聚合之外选择投票。
发布于 2012-01-08 07:09:30
假设Vote为bit
SELECT
Wins = SUM(0 + Vote),
Losses = SUM(1 - Vote)
FROM Votes
WHERE BikeID = 101如果Vote不是bit,则可以在Wins计算中去掉0 +。
发布于 2012-01-08 08:52:18
假设Vote为Int,并且只接受0或1值,您还可以使用以下代码:
SELECT
SUM(Vote) AS Wins,
COUNT(*) - SUM(Vote) AS Losses
FROM Votes
WHERE BikeID = 101https://stackoverflow.com/questions/8771980
复制相似问题