对当前行的SQL引用

对当前行的SQL引用,sql,count,Sql,Count,您好在SQL中是否可以只引用当前行 我有以下SQL查询: SELECT MONTH(Date) as Date, COUNT(Id) as Bets, COUNT(Status) as Won, FROM Bets GROUP BY Datum 现在我要统计他们几个月内所有赢的赌注 应该是这样的: Month | Bets | Won 1 | 1 | 0 11 | 4 | 2 12 | 2 | 1 Month | Bets | Won 1

您好在SQL中是否可以只引用当前行

我有以下SQL查询:

SELECT MONTH(Date) as Date, COUNT(Id) as Bets, COUNT(Status) as Won, FROM Bets
GROUP BY Datum
现在我要统计他们几个月内所有赢的赌注

应该是这样的:

Month | Bets | Won

1     | 1    | 0

11    | 4    | 2

12    | 2    | 1
Month | Bets | Won

1     | 1    | 1

11    | 4    | 4

12    | 2    | 2
现在看起来是这样的:

Month | Bets | Won

1     | 1    | 0

11    | 4    | 2

12    | 2    | 1
Month | Bets | Won

1     | 1    | 1

11    | 4    | 4

12    | 2    | 2
现在如何向Count(Status)子句添加条件或以其他方式处理此问题

谢谢你的帮助

编辑:

我有两张桌子:

赌注:

Id : int (Primary Key)

Date : date

Status : int (Foreign Key)
Id : int (Primary Key)

Status : varchar
状态:

Id : int (Primary Key)

Date : date

Status : int (Foreign Key)
Id : int (Primary Key)

Status : varchar
表中还有一些列,但不相关

赢应该是状态为1的所有赌注的计数金额

地位:

1韩元

2-丢失


3-打开

您正在寻找条件聚合。我想我明白你是怎么想的。因此,答案是使用
case

SELECT MONTH(Date) as Date, COUNT(Id) as Bets,
       SUM(CASE WHEN Status = 1 THEN 1 ELSE 0 END) as Won
FROM Bets
GROUP BY MONTH(Date);
案例
在一行内执行条件(所有列都来自同一行)。注意:当按月份聚合时,通常也应按年份聚合


注意:以上是ANSI标准SQL,基本上所有数据库都支持。有些数据库中有快捷方式。例如,Postgres支持更接近您要求的
FILTER
子句。

如果
status
是0/1指示符,请使用
sum()
而不是
count()
。在SQL中没有“current”行。SQL是基于集合的,它不是一种逐行计算的过程语言。请看一下我编辑的问题,很抱歉问题不清楚。希望现在更好。请看一下我编辑的问题,并为不清楚的问题感到抱歉。希望现在更好。@Gohan。我认为这解决了你修改过的问题。