PARTITION BY行值

问题描述 投票:0回答:1

当某行具有某个值时,我需要对输出表进行分区。我有:

Value|User
----------
A    |Rick
A    |Rick
B    |Rick
C    |Rick
A    |Joe
B    |Joe
B    |Joe

我需要为每个用户对表进行分区,并且当值= A时,所以我需要的是:

Row|Value|User
---------------
1  |A    |Rick 
1  |A    |Rick
2  |B    |Rick
3  |C    |Rick
1  |A    |Joe
2  |B    |Joe
3  |B    |Joe

每个值都有其自己的ID。

我尝试过类似的事情:

SELECT ROW_NUMBER() OVER(PARTITION BY User, Value = A ORDER BY ID ASC) AS Row, Value, User FROM...
SELECT ROW_NUMBER() OVER(PARTITION BY User, WHERE Value = A ORDER BY ID ASC) AS Row, Value, User FROM...
etc

但是,即使有可能,我似乎也无法弄清楚如何正确编写。

sql-server database tsql
1个回答
0
投票
似乎您追求的只是一个DENSE_RANK

DENSE_RANK() OVER (PARTITION BY [User] ORDER BY [Value] ASC) AS [Row]

注意USER是T-SQL中的保留关键字。我强烈建议您为列选择一个不同的名称,否则您必须定界以标识它。 ROWVALUE当前尚未保留,但它们被列为Future Keyword,因此也建议避免使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.