Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql内部连接第一条记录(仅当存在时)获取下一条记录_Sql_Sql Server 2005_Tsql - Fatal编程技术网

Sql内部连接第一条记录(仅当存在时)获取下一条记录

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

这个对我来说很难。我只能用第一个结果做内部连接,但如果存在,我想取第二个结果

这是我的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 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)