2
我在SQL Server 2008的临时表中有一个结果集。其中一个字段是组ID,对于每个组我可以有任何数字的行。我想在新的一列得到行的位置在一组,如“3 1行” 所以,如果我有临时表#DATA(INT的GroupId,项目字符)与获取组中的记录位置+每条记录上组的记录数
GroupId Item
-------------
5 C
5 A
5 T
2 U
3 Y
3 L
我想获得
GroupId Item Pos GroupCount
----------------------------
5 C 1 3
5 A 2 3
5 T 3 3
2 U 1 1
3 Y 1 2
3 L 1 2
我设法做到这一点做
SELECT D.GroupId, D.Item, ROW_NUMBER() OVER (PARTITION BY D.GroupId ORDER BY D.Item) AS Pos, COUNT(1) AS GroupCount
FROM #Data D
INNER JOIN #Data DC
GROUP BY D.GroupId, D.Item
但我不太满意这一点,因为查询其实是因为所有的有点复杂我实际拥有的专栏检索,因为与自己一起进行内部联接以获取组行计数和分区以获取行位置似乎太多了。 有没有更简单的方法来做到这一点?
我并没有完全用添的回答,但它给我的方式:
SELECT D.GroupId, D.Item,
ROW_NUMBER() OVER (PARTITION BY D.GroupId ORDER BY D.Item) AS Pos,
COUNT(D.GroupId) OVER (PARTITION BY D.GroupId) AS GroupCount
FROM #Data D
优秀!并且不需要使用CTE,我只是将'COUNT(GroupID)OVER(PARTITION BY GroupID)'部分和RANK部分添加到一个简单的选择,它工作的很棒! –