我正在尝试使用INNER JOIN
从多个表中获取结果Row_number()
集中的记录。
问题是所有表都有同名的列,我得到一个错误
多次指定列"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的新手,所以如果问题看起来很复杂,请原谅我。
行号无关,而是与您返回两列具有相同名称的事实有关。表名或表别名不是返回的列名的一部分,因此r.dept_dscr和i.dept_dscr被视为相同。
如果两者都需要,可以通过将i.dept_dscr
更改为 i.dept_dscr AS some _alias
来为其中一个指定别名(或两者(,其中some_alias是您选择的标识符。
您可以在没有 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
. . .