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部分添加到一個簡單的選擇,它工作的很棒! –