我有一個包含來自3個鏈接實體(標題>版本> SKU)的數據的sql視圖。該視圖中的數據用於在3個實體內的任何字段上進行搜索。例如,如果指定條件title.regionid ='14',則視圖將返回4,000個唯一行(每個SKU 1個),屬於765個唯一版本,屬於456個唯一標題。基於列值的變化遞增Row_Number
我需要的是使用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行...在這種情況下如何完成分頁?
嘗試(PARTITION BY a.Title ORDER BY a.TitleSort ASC).. –
PARTITION BY將增加所有行內的給定標題,所以如果標題有40個單品,行號會去從1到40,然後當標題更改時,下一個標題的行號將重置爲1。但那不是我想要的。 – pnduke
請參閱[dense_rank()over()](http://msdn.microsoft.com/en-us/library/ms173825%28v=sql.105%29.aspx)。它會爲相同的TitleSort產生相同的數字,並且不會像rank()over()那樣產生間隙。 –