我对SQL中的编号行有问题。我有一张桌子:
loeid loe_logid loe_gidn lp ZGNumerloe
----------------------------------------------
76284 5136 198570 1 9820
76285 5136 198571 2 9820
76286 5136 198572 3 9820
76287 5136 198573 4 9820
76288 5136 198574 5 2804
76289 5136 198575 6 2804
76290 5136 198576 7 9294
我需要编号为ZGNumerloe
列的行。
loeid loe_logid loe_gidn lp ZGNumerloe rank
----------------------------------------------------
76284 5136 198570 1 9820 1
76285 5136 198571 2 9820 1
76286 5136 198572 3 9820 1
76287 5136 198573 4 9820 1
76288 5136 198574 5 2804 2
76289 5136 198575 6 2804 2
76290 5136 198576 7 9294 3
我使用了函数DENSE_RANK
但不必要地对我的报告进行排序。
答案 0 :(得分:3)
完整的工作示例:
DECLARE @DataSource TABLE
(
[loeid] INT
,[loe_logid] INT
,[loe_gidn] INT
,[lp] TINYINT
,[ZGNumerloe] INT
);
INSERT INTO @DataSource ([loeid], [loe_logid], [loe_gidn], [lp], [ZGNumerloe])
VALUES (76284, 5136, 198570, 1, 98201)
,(76285, 5136, 198571, 2, 98201)
,(76286, 5136, 198572, 3, 98201)
,(76287, 5136, 198573, 4, 98201)
,(76288, 5136, 198574, 5, 28042)
,(76289, 5136, 198575, 6, 28042)
,(76290, 5136, 198576, 7, 92943);
WITH DataSource ([loeid], [loe_logid], [loe_gidn], [lp], [ZGNumerloe], [MinLPForZG]) AS
(
SELECT *
,MIN([LP]) OVER (PARTITION BY [ZGNumerloe])
FROM @DataSource
)
SELECT [loeid]
,[loe_logid]
,[loe_gidn]
,[lp]
,[ZGNumerloe]
,DENSE_RANK() OVER (ORDER BY [MinLPForZG])
FROM DataSource;
答案 1 :(得分:0)
这句话但不必要地对我的报告进行排序让我想到,你可能不知道一些排序原则。
ORDER BY
SELECT
DENSE_RANK
之后,它已不再是您很幸运 OVER(ORDER BY...)
你找到那里
请注意,OVER子句中的ORDER BY命令DENSE_RANK,SELECT语句的ORDER BY命令结果集。
这句话我需要编号ZGNumerloe 列的行数让我觉得,你最终都在寻找这个
ROW_NUMBER() OVER(PARTITION BY ZGNumerloe ORDER BY lp) AS PartitionedNumber
答案 2 :(得分:-1)
select *, row_number () over (partition by loeid,loe_gidn order by lp asc) as rnk from Yourtable
答案 3 :(得分:-1)
非常简单,需要使用dense_rank函数。
SELECT *,DENSE_RANK() OVER(ORDER BY [ZGNUMERLOE] DESC) Rnk FROM #TABLE1