Sql server 如何基于计算列进行分页
我有一个问题可以归因于这个简化版本: 我在Sql Server 2008中有这样一个表(这是一个针对我的搜索的非规范化表): 我需要在这个表中搜索一个单词(如“蓝色”),根据单词出现的位置为结果分配一个等级,并通过CategoryId将等级相加对结果进行分组。 我能够做到这一点;当我尝试对结果分页时,问题就出现了。 这是我尝试过的存储过程(现在要搜索的单词已修复,但我知道如何将其作为参数;我还知道如何筛选ID以进行分页): 使用此sp,我得到以下结果:Sql server 如何基于计算列进行分页,sql-server,pagination,calculated-columns,Sql Server,Pagination,Calculated Columns,我有一个问题可以归因于这个简化版本: 我在Sql Server 2008中有这样一个表(这是一个针对我的搜索的非规范化表): 我需要在这个表中搜索一个单词(如“蓝色”),根据单词出现的位置为结果分配一个等级,并通过CategoryId将等级相加对结果进行分组。 我能够做到这一点;当我尝试对结果分页时,问题就出现了。 这是我尝试过的存储过程(现在要搜索的单词已修复,但我知道如何将其作为参数;我还知道如何筛选ID以进行分页): 使用此sp,我得到以下结果: CategoryId | Ranking
CategoryId | Ranking | ID
0001 | 110 | 2
0002 | 100 | 1
问题是:要对结果进行分页,我需要ID(ROW_NUMBER)按排名的降序生成,而以这种方式,它是按CategoryId的顺序生成的。
如果我尝试以这种方式更改sp:
ROW_NUMBER() OVER(ORDER BY Ranking DESC) ID
我无法保存sp,因为排名不是列。
你有什么提示吗?我想通过使用
公共表表达式
()我们可以解决这个问题
试试这个
;WITH cte AS
(
SELECT
[CategoryId],
SUM(
CASE WHEN (PATINDEX('%Blue%', Descr) > 0) THEN 100 ELSE 0 END +
CASE WHEN (PATINDEX('%Blue%', ExtendedDescription) > 0) THEN 10 ELSE 0 END
) AS Ranking,
ROW_NUMBER() OVER(ORDER BY CategoryId DESC) ID
FROM [dbo].[Data]
where (Descr like '%Blue%' or
ExtendedDescription like '%Blue%')
GROUP BY CategoryId
)
SELECT ROW_NUMBER () OVER(ORDER BY Ranking DESC) AS r_no,
Ranking,
ID
FROM cte
非常感谢。正是我需要的!我的下一本手册将是关于Sql Server的,因为我不知道CTE。
ROW_NUMBER() OVER(ORDER BY Ranking DESC) ID
;WITH cte AS
(
SELECT
[CategoryId],
SUM(
CASE WHEN (PATINDEX('%Blue%', Descr) > 0) THEN 100 ELSE 0 END +
CASE WHEN (PATINDEX('%Blue%', ExtendedDescription) > 0) THEN 10 ELSE 0 END
) AS Ranking,
ROW_NUMBER() OVER(ORDER BY CategoryId DESC) ID
FROM [dbo].[Data]
where (Descr like '%Blue%' or
ExtendedDescription like '%Blue%')
GROUP BY CategoryId
)
SELECT ROW_NUMBER () OVER(ORDER BY Ranking DESC) AS r_no,
Ranking,
ID
FROM cte