Надеюсь меня не лишат моего маленького звания MSTS....
Сегодня пока решал проблему отправки сообщений, наткнулся на то что row_number() нельзя напрямую использовать в фильтре where.
Честно говоря, когда мною использовалась нумерация, она обычно лежала где-нибудь в подзапросах или CTE, а тут хотел все и сразу, на что MS SQL сказал "неа....".
Собственно если вы попытаетесь выполнить такой код:
- USE AdventureWorks
- GO
-
- SELECT ROW_NUMBER() OVER (
- ORDER BY addressline1
- ) AS rowNum
- ,addressline1
- ,city
- FROM person.address
- WHERE rowNum > 3;
* This source code was highlighted with Source Code Highlighter.
То получите такую ошибку:
Server: Msg 207, Level 16, State 1, Line
6 Invalid column name 'rowNum'
А решать проблему будем по старинке.
Вариант первый (подзапрос):
- SELECT *
- FROM (
- SELECT ROW_NUMBER() OVER (
- ORDER BY addressline1
- ) AS rowNum
- ,addressline1
- ,city
- FROM person.address
- ) AS x
- WHERE rowNum > 3;
* This source code was highlighted with Source Code Highlighter.
Вариант второй (CTE):
- WITH x (
- rowNum
- ,addressline1
- ,city
- )
- AS (
- SELECT ROW_NUMBER() OVER (
- ORDER BY addressline1
- ) AS rowNum
- ,addressline1
- ,city
- FROM person.address
- )
- SELECT *
- FROM X
- WHERE rowNum > 3;
* This source code was highlighted with Source Code Highlighter.
Комментариев нет:
Отправить комментарий