如何获取某条记录在查询结果中的顺序号

aa323aa323 2017-07-18 03:25:53
如果表中有100条记录
满足某条件的50条
怎么能获取这50条中的具体某一条在这50中顺序排多少号?
...全文
387 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-07-18
  • 打赏
  • 举报
回复
引用 6 楼 aa323aa323 的回复:
牛!
如果帮到了你记得结贴
aa323aa323 2017-07-18
  • 打赏
  • 举报
回复
牛!
二月十六 2017-07-18
  • 打赏
  • 举报
回复
如果是按照id降序排序计算的话这样
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([id] int,[品名] nvarchar(23),[组别] nvarchar(22))
Insert #T
select 33,N'a1',N'A组' union all
select 40,N'a8',N'B组' union all
select 41,N'a9',N'B组' union all
select 42,N'a10',N'B组' union all
select 43,N'a11',N'B组'
Go
--测试数据结束
;WITH cte AS (
SELECT  * ,
        ROW_NUMBER() OVER ( PARTITION BY [组别] ORDER BY id ) AS 顺序
FROM    #T
)
SELECT * FROM cte WHERE [组别] = 'B组' AND 品名='a10'
二月十六 2017-07-18
  • 打赏
  • 举报
回复
或者这样
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[品名] nvarchar(23),[组别] nvarchar(22))
Insert #T
select 33,N'a1',N'A组' union all
select 40,N'a8',N'B组' union all
select 41,N'a9',N'B组' union all
select 42,N'a10',N'B组' union all
select 43,N'a11',N'B组'
Go
--测试数据结束
;WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY [组别] ORDER BY ( SELECT 1) ) AS 顺序
FROM #T
)
SELECT * FROM cte WHERE [组别] = 'B组' AND 品名='a10'


二月十六 2017-07-18
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[品名] nvarchar(23),[组别] nvarchar(22))
Insert #T
select 33,N'a1',N'A组' union all
select 40,N'a8',N'B组' union all
select 41,N'a9',N'B组' union all
select 42,N'a10',N'B组' union all
select 43,N'a11',N'B组'
Go
--测试数据结束
;WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( ORDER BY ( SELECT 1
) ) AS 顺序
FROM #T
WHERE [组别] = 'B组'
)
SELECT * FROM cte WHERE 品名='a10'


aa323aa323 2017-07-18
  • 打赏
  • 举报
回复
可能没表达清楚
比如
想获取a10在表中B组的顺序,
结果应该是3,就是排在第三个。这个语句怎么写?
二月十六 2017-07-18
  • 打赏
  • 举报
回复
加一个
ROW_NUMBER()OVER(ORDER BY 列名)

例如:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([name] NVARCHAR(100))
Insert #T SELECT '测试'+RTRIM(number) FROM master.dbo.spt_values
WHERE type = 'P' AND number<100
Go
--测试数据结束
Select *,ROW_NUMBER()OVER(ORDER BY name) AS num from #T


27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧