2011-02-02 9 views
1

Мне нужно реализовать разбиение на страницы для моего запроса на объединение, но я получаю сообщение об ошибке «Msg 102, Level 15, State 1, Line 1 Неправильный синтаксис около ')'.". Я последовал примеру, который я нашел из этого link.SQL Server 2008 R2 pagination

select * 
    from (select Id, 
       row_number() OVER (order by Id asc) as RowNumber 
      from (select Id 
        from (select Id 
          from Table1) as table1 
       union all 
       select Id 
        from (select Id 
          from Table2) as table2)) as t Derived 
    WHERE RowNumber > 5 
    and RowNumber <= 10 
+0

Что происходит? Вы получили сообщение об ошибке? – Axarydax

+0

Обновленный ответ, содержащий сообщение об ошибке. – newbie

+0

Мне никогда не нравились местоположения ошибок SQL Server, но я рассчитываю 12 строк в вашем коде. Есть ли что-нибудь, что вы не наклеили? – donkim

ответ

3

Использование:

SELECT u.* 
    FROM (SELECT t.id, 
       ROW_NUMBER() OVER (ORDER BY t.id) as rownum 
      FROM (SELECT t1.id 
        FROM TABLE1 t1 
       UNION ALL 
       SELECT t2.id 
        FROM TABLE2 t2) as t) AS u 
WHERE u.rownum > 5 
    AND u.rownum <= 10 

Мне кажется, что ваш запрос пропускал закрывающую скобку для производной таблицы называется «производным», но там не было необходимости подзапросов в UNION поэтому я удалил их.

+0

Похоже, что это был не недостающий скобок, а недостающий псевдоним таблицы (для подсекции UNION ALL). Во всяком случае, вы изменили его намного лучше. –

+0

Мне это нравится. Небольшой вывод, который я использую для подкачки, таков: 'SELECT TOP (5) u. * FROM (SELECT t.id, ROW_NUMBER() OVER (ORDER BY t.id) в качестве rownum FROM (SELECT t1.id FROM ТАБЛИЦА 1 t1 UNION ALL SELECT t2.id FROM TABLE2 t2) as t) AS u ГДЕ u.rownum> 5 ' –

0

Если вы выберете из подзапроса, тогда вы должны указать ему псевдоним. У вас есть 2 внешних подзапроса, но только один с псевдонимом. Должно быть: from Table2) as tabl2) as t) as t

1

Вам просто нужно переместить одну скобку:

from Table2) as table2)) as t Derived следует читать from Table2) as table2) as t) Derived

Вы также можете удалить некоторые из подзапросов, которые делают Table1 в table1 и Table2, чтобы table2, но я предполагаю, что есть какой-то другой реан для тех, кто там (например, это основано на другом сложном запросе)

+0

Нет, это не намного сложнее, и это отлично с вашим советом, спасибо! – newbie

1
select * 
    from (select Id, 
       row_number() OVER (order by Id asc) as RowNumber 
      from (select Id 
        from Table1 as table1 
       union all 
       select Id 
        from Table2)p)t 
    WHERE RowNumber > 5 
    and RowNumber <= 10 
Смежные вопросы