Sql内部连接第一条记录(仅当存在时)获取下一条记录
这个对我来说很难。我只能用第一个结果做内部连接,但如果存在,我想取第二个结果 这是我的A桌Sql内部连接第一条记录(仅当存在时)获取下一条记录,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,这个对我来说很难。我只能用第一个结果做内部连接,但如果存在,我想取第二个结果 这是我的A桌 ID NAME VALUE 1 A 123 2 B 456 3 C 789 4 A 456 表B BID BNAME BVALUE 1 A ABC 2 A CDE 3 B 845 4 C 1234 我的选择SQL: SELECT * FROM A CROSS APPLY ( SELECT T
ID NAME VALUE
1 A 123
2 B 456
3 C 789
4 A 456
表B
BID BNAME BVALUE
1 A ABC
2 A CDE
3 B 845
4 C 1234
我的选择SQL:
SELECT * FROM A
CROSS APPLY (
SELECT TOP 1 *
FROM B
WHERE A.Name = B.BName
) BB
它回来了
1 A 123 1 A ABC
2 B 456 3 B 845
3 C 789 4 C 1234
4 A 456 1 A ABC
请帮忙,我想要这个结果:
1 A 123 1 A ABC
2 B 456 3 B 845
3 C 789 4 C 1234
4 A 456 2 A CDE
我接受tmp表和任何类型的查询:(下面在注释中说明,这两个表将始终具有匹配的行
WITH A
AS (SELECT *,
ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY ID) AS RN
FROM TableA),
B
AS (SELECT *,
ROW_NUMBER() OVER (PARTITION BY BNAME ORDER BY BID) AS RN
FROM TableB)
SELECT A.ID,
A.NAME,
A.VALUE,
B.BID,
B.BNAME,
B.BVALUE
FROM A
JOIN B
ON A.NAME = B.BNAME
AND A.RN = B.RN
表A和表B都有
a2,b1,cx1
。如果其中一个名称没有相同的数字,那么期望的结果会是什么样子?只要想想它总是相同的行数。因此,您希望得到(1,1)
和(4,2)
,而不是:(1,2)
和(4,1)
?