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

时间:2016-01-05 14:40:53

标签: sql sql-server

很抱歉这个问题,但我无法解决这个简单的问题。

我有这张桌子:

ID_Type      Item
-----------------
A            1
P            2
P            3
A            4
P            5
A            6

我需要计算一个"组"基于ID_Type字段的增量计数器,其中该字段具有" 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'出现,我需要递增计数器。任何帮助都会被贬低。

2 个答案:

答案 0 :(得分:4)

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

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

这比相关子查询方法更有效,特别是在较大的数据集上。

答案 1 :(得分:3)

一种方法是子查询:

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。