在SQL中按类别计数

时间:2012-11-29 19:34:30

标签: sql aggregate

我有一个似乎是一个简单的问题,但当然它永远不会。

我的数据看起来像这样(我正在显示竖线分隔):

Identifier | Roll Up | Sequence

1234       | 4567    | 1

1234       | 4567    | 2

1235       | 4567    | 1

1235       | 4567    | 2

1236       | 6789    | 1

1237       | 6789    | 1

因此,标识符是“卷起”字段的“版本”,每个“卷起”字段都有序列。

我需要做的是有一个额外的列来计算卷起的'版本',如下:

Version |Identifier | Roll Up | Sequence

1       |1234       | 4567    | 1

1       |1234       | 4567    | 2

2       |1235       | 4567    | 1

2       |1235       | 4567    | 2

1       |1236       | 6789    | 1

2       |1237       | 6789    | 1

我认为这将是一个简单的 计算每个标识符每个卷起 ,但我无法通过COUNT()或{{正确地执行此操作1}}

有人会为该派生列提供解决方案吗?

非常感谢, 特纳。

1 个答案:

答案 0 :(得分:2)

在您的简单查询中添加一列,如下所示:

row_number() over (partition by Identifier, Roll_Up order by Identifier, Roll_Up)

我认为这将是产生最终结果的脚本:

SELECT  t0.*, count1
FROM  Test AS t0 INNER JOIN
  (SELECT Identifier1, ROLLUP1,
     Row_Number() Over
   (Partition BY Identifier1, Rollup1
    ORDER BY Identifier1, RollUp1) AS count1
   FROM Test
   ) AS t1
  ON t0.Identifier1 = t1.Identifier1
  AND t0.ROLLUP1 = t1.ROLLUP1