Sql 根据列值的变化增加行数

Sql 根据列值的变化增加行数,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个sql视图,其中包含来自3个链接实体的数据标题>版本>SKU。此视图中的数据用于搜索3个实体中的任何字段。例如,如果指定一个条件title.regionid='14',则该视图将为每个SKU返回4000个唯一行1,这些行属于765个唯一版本,属于456个唯一标题 我需要的是使用Row_Number启用基于标题的分页。所以 SELECT * FROM myview WHERE title.regionid = '14' AND Row BETWEEN 0 AND 35 问题是,“我的行”

我有一个sql视图,其中包含来自3个链接实体的数据标题>版本>SKU。此视图中的数据用于搜索3个实体中的任何字段。例如,如果指定一个条件title.regionid='14',则该视图将为每个SKU返回4000个唯一行1,这些行属于765个唯一版本,属于456个唯一标题

我需要的是使用Row_Number启用基于标题的分页。所以

SELECT * FROM myview WHERE title.regionid = '14' AND Row BETWEEN 0 AND 35
问题是,“我的行”列需要按标题而不是按SKU计算行数,因此从4000行的结果集中,如果第一个标题包含12个版本和65个SKU,则所有65行的行号都应为1,因为它们属于同一标题

我不能使用GroupBy,因为我的视图包含40多个列,所有这些列都可以通过WHERE子句进行搜索

问题是:

SELECT *
FROM (
SELECT row_number() OVER (ORDER BY a.TitleSort ASC) AS Row, a.* 
FROM (SELECT * FROM v_AdvancedSearch 
WHERE 
    istitledeleted = 0
    --AND ISBN = '1-4157-5842-5'
    --AND etc
    ) AS a
) d
WHERE 
Row BETWEEN 0 AND 35

在第一页中有35行,只属于4个标题,但行列按行计数,因此它停在那里,而如果按标题计数,我将在第1页中得到387行。。。在这种情况下,如何完成分页?

此表单最适合我

WITH Titles AS
(
SELECT *
FROM (
SELECT row_number() OVER (ORDER BY a.TitleSort ASC) AS Row, a.* 
    FROM (SELECT DISTINCT TitleSORT, TitleId FROM v_AdvancedSearch 
    WHERE 
        istitledeleted = 0 
        --AND ISBN = '1-4157-5842-5'
        --AND PictureFormat = 'Widescreen'
        --AND UPC = '0-9736-14381-6-0'
        --AND Edition = 'Standard'
        ) AS a
) d
WHERE 
Row BETWEEN 0 AND 35
)
SELECT * FROM v_AdvancedSearch V
INNER JOIN Titles ON Titles.TitleId = V.TitleId 
WHERE istitledeleted = 0 
--CONDITIONS NEED TO BE REPEATED HERE
--AND ISBN = '1-4157-5842-5'
ORDER BY V.TitleSort ASC
WITH 
[cte] AS ( 
    SELECT 
        DENSE_RANK ( ) OVER ( ORDER BY [v].[TitleSort], [v].[TitleId] ) AS [ordinal], 
        [v].[TitleSort], 
        [v].[TitleId] 
        --, 
        --field list, 
        --etc 
    FROM [v_AdvancedSearch] AS [v] 
    WHERE 
        [v].[istitledeleted] = 0 
        --AND 
        --additional conditions AND 
        --etc 
) 
SELECT 
    [v].[ordinal], 
    [v].[TitleSort], 
    [v].[TitleId] 
    --, 
    --field list, 
    --etc 
FROM [cte] AS [v] 
WHERE 
    [v].[ordinal] >= 0 AND 
    [v].[ordinal] <= 35 
ORDER BY [v].[ordinal]; 
无需单独或分组 无需重复标准条件 只要有明确的字段列表就行了
尝试按a.Title ORDER BY a.TitleSort ASC.分区方式将增加给定标题内的所有行,因此,如果标题有40个SKU,行号将从1变为40,然后当标题更改时,下一个标题的行号将重置为1。但那不是我想要的。看。它将为同一标题排序生成相同的数字,并且不会像排名那样有差距。尼古拉-这应该是一个答案,而不是一个评论。以分区为行标题的稠密_秩和以排序为行标题的order by将提供op所要求的内容。