如何基于SQL Server中的其他列组获取行数

问题描述

我需要计算每个月向某些客户开具发票的日期

考虑名为Table1的表

Branch  Month  Date     Amount
----------------------------------------
 B1     April  01/04/20  10000
 B1     April  14/04/20  13000
 B1     May    01/05/20  25000
 B1     May    14/05/20  23000

我尝试了以下代码

Select 
    Branch,Month,Date,Amount,Row_Number() over (partition by Branch order by Month) as rowcount 
from table1

结果是

Branch  Month  Date      Amount   rowcount
----------------------------------------
 B1     April  01/04/20  10000      1
 B1     April  14/04/20  13000      2
 B1     May    01/05/20  25000      3
 B1     May    14/05/20  23000      4

我需要的结果应该基于列月份对名为branch的列进行计数,期望的结果是

Branch  Month  Date      Amount   rowcount
---------------------------------------------
 B1     April  01/04/20  10000     1
 B1     April  14/04/20  13000     2
 B1     May    01/05/20  25000     1
 B1     May    14/05/20  23000     2

这里的行数基于列分支和月份,我如何获得此结果?

解决方法

您需要按month进行分区。像这样:

row_number() over (partition by Branch,month order by Month)

请注意,重复month。 SQL Server中需要一个order by,所以您需要某物。其他选项是:

row_number() over (partition by Branch,month order by (select null))
row_number() over (partition by Branch,month order by date)

我怀疑最后一个是您真正想要的。