Проблема SQL Server 2005 с ROW_NUMBER () OVER (ORDER BY ...) - PullRequest
1 голос
/ 28 марта 2011

Этот вопрос относится к предыдущему вопросу, который я задавал ... см. "SQL Server 2005 Как заказать набор записей при использовании оператора LIKE".

Следующие работы ...

with xx as
(
select  case
    when mycol = 'finance' then 1
    when mycol like 'finance%' then 2
    when mycol like '%finance%' then 3
    end as rnk, 
    *
from    MyTable
where   mycol like '%finance%'
)

select * from xx 
order by xx.rnk, xx.mycol;

Но что я действительно хочу сделать, так это то, что я использую сервер для пролистывания записей ...

WITH xx AS
(
select  case
    when t.term = 'finance' then 1
    when t.term like 'finance%' then 2
    when t.term like '%finance%' then 3
    end as rnk, 
    *, 
    row_number() over (order by rnk, t.term) as rownumber
from    tblTerms t
where   t.term like '%finance%'
)

select * from xx 
where rownumber between 11 and 20 -- page #2
order by xx.rnk, xx.mycol;

Я получаю ошибку "Неверное имя столбца'rnk' ".

У кого-нибудь есть идеи, как решить эту проблему?

Большое спасибо,

Mark

1 Ответ

1 голос
/ 28 марта 2011

Проблема в определении общего табличного выражения (CTE).Вы не можете ссылаться на rnk в том же предложении SELECT, где определен псевдоним столбца.Вы можете попробовать это:

WITH xx AS
(
select  case
    when t.term = 'finance' then 1
    when t.term like 'finance%' then 2
    when t.term like '%finance%' then 3
    end as rnk, 
    *
from    tblTerms t
where   t.term like '%finance%'
),

yy AS
(
SELECT *,
    row_number() over (order by rnk, term) as rownumber
FROM xx
)

select * from yy 
where rownumber between 11 and 20 -- page #2
order by yy.rnk, yy.mycol;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...