我正在尝试使用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的新手,所以如果问题看起来很复杂,请原谅我。
答案 0 :(得分:2)
该问题与行号无关,但是与您返回具有相同名称的两列这一事实无关。表名或表别名不是返回的列名的一部分,因此r.dept_dscr和i.dept_dscr被视为相同。
如果同时需要两者,则可以通过将i.dept_dscr
更改为i.dept_dscr AS some _alias
(其中some_alias是您选择的标识符)来给其中一个别名(或两者都有)。
答案 1 :(得分:0)
您可以更简单地编写不带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
. . .