Id groupId LangId Title Category
------ --------- --------- ------------- -----------
4230 4230 1 aaamrmtwna srhrtiewuv
14230 4230 2 uphliibxil ppanvtqwht
24230 4230 3 neutnlvgkt xbhwwyjqnm
6023 6023 1 aacnjohrjk ehmjptsgxd
16023 6023 2 mejrzfhgjv lhieeslqgf
26023 6023 3 pibswsvfxh pzzhgjtbyt
3338 3338 1 aaeidhaivc pxbolmwjan
13338 3338 2 lsbeyvtrch pdtyrcwkdd
23338 3338 3 huewmezblx kpjzpfryki
5573 5573 1 aafqhvgltp xzwmguqfro
15573 5573 2 clzywmldud hdylrqtcka
25573 5573 3 rwkdahwpdq syhysvkftx
9896 9896 1 aaiaxqdwho mxdgtdaeqx
19896 9896 2 onufsjeaal cjrsotvbqt
29896 9896 3 fowufxxujk xztkjbctru
9040 9040 1 aajjamlqkf wattqxerjh
19040 9040 2 nrkdzgourq rmckjjpvfu
29040 9040 3 winkynkdkf zhfmkqsyvc
5518 5518 1 aamdwlwwgl kdzsxuzfdp
15518 5518 2 byzzhqqfsr cdmxmcxyof
25518 5518 3 ylkffbmief qildnvyqhi
5043 5043 1 aamqnboinl awtmdhbiuq
15043 5043 2 nachemovnv rdzlbxqkdv
25043 5043 3 twxyozpzra hskmwnsbjc
501 501 1 aansttgfjk bmirdqmpgb
Я написал курсор для получения этого вывода (я вставил эти данные случайных строк для теста). Но если в производительности курсоров курсора больше, чем 1k, то производительность становится настолько медленной. Мне нужно для записи запроса чередуйте этот курсор.Альтернатива для этого курсора
Это мой курсор:
DECLARE @Id int
DECLARE @groupId int
DECLARE @LangId int
DECLARE @Title nvarchar(50)
DECLARE @Category nvarchar(50)
DECLARE @i int
DECLARE @Result TABLE
(
Id int,
groupId int,
LangId int,
Title nvarchar(50),
Category nvarchar(50)
)
DECLARE csr_group CURSOR FORWARD_ONLY FOR
SELECT TOP 100 * FROM SortThis order by LangID, Title
OPEN csr_group
FETCH NEXT FROM csr_group INTO @Id , @groupId , @LangId , @Title , @Category
WHILE @@FETCH_STATUS =0
BEGIN
set @i = (select Id from @Result where Id = @Id)
if @i is null
begin
INSERT INTO @Result
(
[ID]
,[GroupId]
,[LangId]
,[Title]
,[Category]
)
Select * from SortThis where GroupId = @groupId
FETCH NEXT FROM csr_group INTO @Id , @groupId , @LangId , @Title , @Category
end
END
CLOSE csr_group
DEALLOCATE csr_group
select * from @Result
order by (Select 0)
OFFSET ((1 - 1) * 25) ROWS
FETCH NEXT 25 ROWS ONLY;
Когда я сортировать таблицу по названию или категории, каждые языки этого продукта следует рассматривать в subbuttom и упорядочены по LANGID (как это: http://i.imgur.com/QBffjBX.png).
Я не нашел пример, похожий на мою проблему. Пожалуйста, помогите.
Что происходит, когда вы используете более 10000 записей? Разрешаете ли вы дублировать идентификаторы? –
Это было бы намного проще, если бы вы могли превратиться в расходуемый набор данных, чтобы мы могли помочь вам с кодом. sqlfiddle.com - отличное место для начала. Кроме того, у вашего окончательного выбора есть заказ, но у вас нет способа узнать, какой заказ они действительно вернут. Вы действительно должны использовать что-то в наборе данных для заказа. Я заинтригован интересным расчетом для смещения. Это выглядит очень странно для меня. –
@KevinCook после запроса 1000 записей gettin медленнее, просто it.It не дублирует идентификаторы. –