Sql 根据列值的变化增加行数
我有一个sql视图,其中包含来自3个链接实体的数据标题>版本>SKU。此视图中的数据用于搜索3个实体中的任何字段。例如,如果指定一个条件title.regionid='14',则该视图将为每个SKU返回4000个唯一行1,这些行属于765个唯一版本,属于456个唯一标题 我需要的是使用Row_Number启用基于标题的分页。所以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 问题是,“我的行”
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所要求的内容。