Есть ли альтернативный метод для реализации Resultset row_number () и использовать его для получения записей между ROW_NUMBER - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь получить записи в наборе результатов между Row_number() из нескольких таблиц, используя INNER JOIN.

Проблема в том, что все таблицы имеют столбцы с одинаковым именем, и я получаюошибка

Столбец 'DEPT_DSCR' был указан несколько раз для

Имейте в виду, что запрос внутри результирующего набора автоматически генерируется из процедуры, поэтому я не могу добавитьпсевдоним или что-то в этом роде.

Так я пишу свой запрос

with resultset as 
(
     select  
         row_number() over (order by a.a) rownumber, 
         g.dept_dscr, i.dept_dscr 
     from 
         abc a  
     inner join 
         def g on g.dept_no = a.b  
     inner join 
         ghi i on i.dept_no = a.c 
     where 
         a.b = '640' and a.c = '640'
) 
select * 
from resultset  
where rownumber between 1 and 12 
order by rownumber

Я новичок в SQL Server, поэтому извините, если вопрос выглядит сложным.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

Проблема не связана с номером строки, но с тем фактом, что вы возвращаете два столбца с одинаковым именем. Имя таблицы или псевдоним таблицы не являются частью возвращаемого имени столбца, поэтому r.dept_dscr и i.dept_dscr считаются одинаковыми.

Если вам нужны оба, вы можете дать одному из них псевдоним (или оба), изменив i.dept_dscr на i.dept_dscr AS some _alias, где some_alias - это идентификатор по вашему выбору.

0 голосов
/ 28 апреля 2019

Вы можете проще написать этот запрос без CTE:

 select row_number() over (order by a.a) as rownumber, 
        g.dept_dscr, i.dept_dscr 
 from abc a join
      def g
      on g.dept_no = a.b join
      ghi i
      on i.dept_no = a.c 
 where a.b = 640 and a.c = 640  -- things that look like numbers usually are
 order by rownumber
 offset 0 fetch first 12 rows only;

По иронии судьбы, если вы напишите это так, у вас не будет проблем.SQL Server позволяет наборам результатов дублировать имена столбцов, но не представления, подзапросы или CTE.

Тем не менее, лучше определить, откуда поступают столбцы:

 select row_number() over (order by a.a) as rownumber, 
        g.dept_dscr as def_dept_dscr,
        i.dept_dscr as ghi_dep_dscr
 . . . 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...