gpt4 book ai didi

sql - 获取一条记录在组中的位置+该组在每条记录上的记录数

转载 作者:行者123 更新时间:2023-12-02 08:45:24 29 4
gpt4 key购买 nike

我在 SQL Server 2008 的临时表中有一个结果集。其中一个字段是组 ID,对于每个组,我可以有任意数量的行。我想在新列中获取该行在组中的位置,例如“第 1 行,共 3 行”所以,如果我有临时表 #Data(GroupId int, Item char) 和

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

但我对此不太满意,因为查询实际上有点复杂,因为我实际上必须检索所有列,并且因为与自身进行内部连接以获得组行计数和获得行位置的分区似乎太多了。有更简单的方法吗?


我并没有完全使用 Tim 的答案,但它为我指明了方向:

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

最佳答案

您可以使用COUNT(GroupID)OVER(PARTITION BY GroupID):

WITH CTE AS
(
SELECT GroupId, Item
, GroupCount = COUNT(GroupID) OVER (PARTITION BY GroupID)
, Pos = ROW_NUMBER() OVER (Partition By GroupID Order By GroupId)
FROM #Data
)
SELECT GroupID, Item, Pos, GroupCount
FROM CTE

OVER Clause (Transact-SQL)

这是一个 fiddle :http://sqlfiddle.com/#!6/b6505/2/0

请注意,由于您尚未告知如何订购,因此未订购。

关于sql - 获取一条记录在组中的位置+该组在每条记录上的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829431/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com