如何在sql server中对行号进行内连接

Gra*_*ham 19 sql sql-server sql-server-2008

SQL Server 2008

两张桌子:

表A有以下数据:

RowA
RowB
RowC
RowD
Run Code Online (Sandbox Code Playgroud)

表B有以下数据:

Row4
Row3
Row2
Row1
Run Code Online (Sandbox Code Playgroud)

我想获得以下输出:

RowA Row1
RowB Row2
RowC Row3
RowD Row4
Run Code Online (Sandbox Code Playgroud)

两个表之间唯一的共同值是行号

我当然可以单独获取数据:

SELECT val
FROM A
ORDER BY val

SELECT val
FROM B
ORDER BY val
Run Code Online (Sandbox Code Playgroud)

但是我如何加入行号呢?

如果我没有订单,但只是希望按顺序排列的行怎么办?

RowA Row4
RowB Row3
RowC Row2
RowD Row1
Run Code Online (Sandbox Code Playgroud)

就像在加入一样

SELECT val
FROM A

SELECT val
FROM B
Run Code Online (Sandbox Code Playgroud)

Joe*_*eph 30

试试这个:

在sql server 2008中使用ROW_NUMBER()函数

select A.val,B.val 
from(
    SELECT val,row_number() over (order by val) as row_num
    FROM A)A
join
    (SELECT val,row_number() over (order by val) as row_num
    FROM B)B
on  A.row_num=B.row_num
ORDER BY A.val,B.val
Run Code Online (Sandbox Code Playgroud)


SQL小提琴演示

  • @Graham:你可以通过(选择0)给出订单,因为order by子句是强制性的..请看这里http://www.sqlfiddle.com/#!3/9e5bf/5 (8认同)
  • 这看起来是一个好的开始,但是如果我没有订单怎么办 (2认同)