2013-12-18 9 views
0

У меня есть этот запрос, который почти делает то, что я хочу:TSQL OrderBy Offset вопрос

SET NOCOUNT ON 

SELECT D.Id from MtdMdl_HierarchicalObject D 
where D.Name LIKE '%R%' 

SELECT B.* FROM MtdMdl_Item A 
OUTER apply (SELECT * FROM MtdMdl_Item as C where a.Id=c.Id) as B 
WHERE A.Owner in 
(
    SELECT D.Id from MtdMdl_HierarchicalObject D 
    where D.Name LIKE '%R%' 
) 
order by Id offset 0 ROWS FETCH NEXT 3 ROWS ONLY 
GO 

К сожалению, я хотел бы Орден по идентификатору Fetch New 3 Строки, которые должны применяться на каждом объекте, возвращаемый:

SELECT D.Id from MtdMdl_HierarchicalObject D 
where D.Name LIKE '%R%' 

Поскольку текущий скрипт применяет пейджинг для всего результата предыдущего утверждения.

ответ

1

Если вы не пропустите ни одного ряда и просто получите 3 строки, зачем вообще использовать СМЕЩЕНИЕ ??? просто использовать TOP пункт

SELECT B.* 
FROM MtdMdl_Item A OUTER APPLY 
        (SELECT TOP 3 * 
        FROM MtdMdl_Item 
         where Id= a.Id) as B 
WHERE A.Owner in 
(
    SELECT D.Id from MtdMdl_HierarchicalObject D 
    where D.Name LIKE '%R%' 
) 
order by Id 

В этом случае вы могли бы сделать что-то вроде этого ...

SELECT * FROM 
(
SELECT B.*, A.ID , RN = ROW_NUMBER() OVER (PARTITION BY A.ID ORDER BY A.ID) 
FROM MtdMdl_Item A OUTER APPLY 
        (SELECT * 
        FROM MtdMdl_Item 
         where Id= a.Id) as B 
WHERE A.Owner in 
(
    SELECT D.Id from MtdMdl_HierarchicalObject D 
    where D.Name LIKE '%R%' 
) 
order by Id 
) Q 
WHERE RN >= LowerList AND RN <= UpperLimit 
+0

Я думаю ОП хочет новых 3 строки для каждого раунда поездки DB, просто положить сверху плохо вернуться в тот же 3 ряда. Если моя догадка правильная, то вам нужно сохранить и передать какой-то параметр StartFromRow_N из приложения в запрос. – jean

+0

@jean ID OFFSET 0 означает, что OP не пропускает ни одной строки. поэтому будет иметь смысл просто использовать предложение TOP, а не OFFSET. –

+0

Это моя ошибка, в этом случае 0 в смещении, но реальное намерение - использовать пейджинг, поэтому я могу иметь ненулевое смещение. – Nock

Смежные вопросы