34,592
社区成员
发帖
与我相关
我的任务
分享
create table #ta(id int, value int)
insert into #ta select 1, 18
union all select 2, 19
union all select 3, 10
union all select 4, 7
union all select 5, 20
select id,value, dense_rank() over(order by value asc)-1 as rank_num from #ta
create table #ta(id int, value int)
insert into #ta select 1, 18
union all select 2, 19
union all select 3, 10
union all select 4, 7
union all select 5, 20
select a.value, count(case when a.value - b.value > 0 then 1 else null end) counter
from #ta a, #ta b
where a.value <> b.value group by a.value
/*value counter
----------- -----------
7 0
10 1
18 2
19 3
20 4
(5 行受影响)
*/
CREATE TABLE t1
(
id INT,
col INT
)
INSERT INTO t1
SELECT 1, 18 UNION ALL
SELECT 2, 19 UNION ALL
SELECT 3, 10 UNION ALL
SELECT 4, 7 UNION ALL
SELECT 5, 20
SELECT * FROM t1
;WITH aaa AS
(
SELECT id,col,ROW_NUMBER() OVER(ORDER BY col)-1 AS rowindex FROM t1
)
SELECT * FROM aaa ORDER BY id
id col rowindex
1 18 2
2 19 3
3 10 1
4 7 0
5 20 4
select *,统计=(select count(*) from @table where 数值<t.数值) from @table t
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([序号] INT,[数值] INT)
INSERT [tb]
SELECT 1,18 UNION ALL
SELECT 2,19 UNION ALL
SELECT 3,10 UNION ALL
SELECT 4,7 UNION ALL
SELECT 5,20
--------------开始查询--------------------------
--1
SELECT * ,ROW_NUMBER()OVER(ORDER BY [数值])-1 FROM [tb] ORDER BY [序号]
--2
SELECT * ,(SELECT COUNT(*) FROM tb WHERE [数值]<t.[数值]) FROM [tb] AS t
----------------结果----------------------------
/*
序号 数值 (无列名)
1 18 2
2 19 3
3 10 1
4 7 0
5 20 4
*/