如何在SQL Server 2008上创建此条件分组字段?

如何在SQL Server 2008上创建此条件分组字段?,sql,sql-server,Sql,Sql Server,很抱歉提出这个问题,但我无法解决这个简单的查询 我有这张桌子: ID_Type Item ----------------- A 1 P 2 P 3 A 4 P 5 A 6 我需要根据ID_类型字段计算一个组增量计数器,该字段有一个a值。这是预期的结果: ID_Type Item Counter --------------------

很抱歉提出这个问题,但我无法解决这个简单的查询

我有这张桌子:

ID_Type      Item
-----------------
A            1
P            2
P            3
A            4
P            5
A            6
我需要根据ID_类型字段计算一个组增量计数器,该字段有一个a值。这是预期的结果:

ID_Type      Item     Counter
-----------------------------
A            1        1
P            2        1
P            3        1
A            4        2
P            5        2
A            6        3
因此,每次出现ID为_Type='a'的记录时,我都需要递增计数器。任何帮助都将受到感谢。

一种方法是子查询:

SELECT ID_Type, Item, (
  SELECT COUNT(*) FROM MyTable t2
  WHERE t2.Item <= t1.Item
  AND t2.ID_Type='A'
) AS Counter
FROM MyTable t1
ORDER BY Item ASC

这将适用于任何版本的SQL Server。

在SQL Server 2012+中,您可以使用累计总和:

select t.*,
       sum(case when id_type = 'A' then 1 else 0 end) over (order by item) as counter
from t;

这将比相关子查询方法效率更高,尤其是在较大的数据集上。

我认为您需要在子查询中按项排序以获得保证results@Mihai . . . 子查询中不需要ORDER BY。