我有下表:
CREATE table prd
(
prdid varchar(10)
)
insert into prd values ('prd1011'),('prd1023'),('prd4532'),('prd2341')
我需要使用rownumber返回相同的内容而不使用内置函数的ROWNUM()。 这可能吗?
答案 0 :(得分:3)
select *, (
select count(*)
from prd p2
where p1.prdid >= p2.prdid
) as cnt
from prd p1
答案 1 :(得分:3)
您未能为请求指定SQL Server版本或动机。
SQL Server 2012+方法
SELECT prdid,
COUNT(*) OVER (ORDER BY prdid ROWS UNBOUNDED PRECEDING)
FROM prd
答案 2 :(得分:2)
非唯一列的解决方案:
SELECT p.prdid, p.num - t.n + 1 as num
FROM (
SELECT p1.prdid, p1.cnt
, (
SELECT COUNT(*)
FROM prd p2
WHERE p2.prdid <= p1.prdid
) num
FROM (
SELECT p1.prdid, COUNT(*) cnt
FROM prd p1
GROUP BY p1.prdid
) p1
) p
INNER JOIN (
select 1 n union all select 2 union all
select 3 union all select 4 union all select 5 union all
select 6 union all select 7 union all select 8 union all
select 9 union all select 10 union all select 11 union all
select 12 union all select 13 union all select 14 union all
select 15 union all select 16 union all select 17 union all
select 18 union all select 19 union all select 20
) t ON t.n <= p.cnt
找到here。
答案 3 :(得分:1)
我试过这个并且它有效,但只有在prdid列是唯一的时才能正常工作:
select prdid,
(select COUNT(*) from prd p where p.prdid >= r.prdid)rnk
from prd r order by rnk