0
我有一个问题归因于这种简化版本进行分页: 我在SQL Server 2008中像这样的表(这是特定的非规范化表我搜索):如何根据计算列
ItemId | CategoryId | Descr | ExtendedDescription
0001 | 1 | Mouse X | Blue mouse
0002 | 1 | Blue Pen | Beautiful ....
0003 | 2 | Blue Pencil | Pencil with ...
0004 | 2 | Eraser | Eraser with ....
我需要在此表中搜索一个单词(如“Blue”),根据单词出现的位置为结果指定一个等级,并将结果按CategoryId总和排序。 我能够做到这一点;当我尝试对结果进行分页时会出现问题。 这是存储过程,我试图(现在搜索是固定的话,但我知道如何使它的参数;我也知道如何过滤ID有分页):
CREATE PROCEDURE [dbo].[spSearch]
AS
BEGIN
SET NOCOUNT ON;
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
ORDER BY Ranking DESC
END
有了这个SP我得到以下结果:
CategoryId | Ranking | ID
0001 | 110 | 2
0002 | 100 | 1
的问题是:要分页的结果,我需要一个ID(ROW_NUMBER)生成订货下降的排名,而在这种方式中的CategoryId的订单的生成。 如果我尝试把sp这样:
ROW_NUMBER() OVER(ORDER BY Ranking DESC) ID
,因为排名是不是一个专栏中,我无法保存SP。 你有什么提示吗?
谢谢!正是我需要的!我的下一本手册是关于Sql Server的,因为我不了解CTE。 –