Sql server 有点';标量积';在SQL Server中

Sql server 有点';标量积';在SQL Server中,sql-server,Sql Server,我有这两个临时表,正在尝试构造一个select,返回以下结果: 1 W A 1 X - 2 Y B 2 - C 3 Z D 3 Z2 E 3 - F 以下是我的临时表的定义: CREATE TABLE #T1 (a INT, b VARCHAR(50)) CREATE TABLE #T2 (a INT, b VARCHAR(50)) INSERT INTO #T1 (a, b) VALUES (1, 'W'), (1, 'X'), (2, 'Y'), (3, 'Z'), (3,

我有这两个临时表,正在尝试构造一个select,返回以下结果:

1 W  A
1 X  -
2 Y  B
2 -  C
3 Z  D
3 Z2 E
3 -  F
以下是我的临时表的定义:

CREATE TABLE #T1 (a INT, b VARCHAR(50))
CREATE TABLE #T2 (a INT, b VARCHAR(50))

INSERT INTO #T1 (a, b)
VALUES (1, 'W'), (1, 'X'), (2, 'Y'), (3, 'Z'), (3, 'Z2')

INSERT INTO #T2 (a, b)
VALUES (1, 'A'), (2, 'B'), (2, 'C'), (3, 'D'), (3, 'E'), (3, 'F')

SELECT * FROM #T1
SELECT * FROM #T2

DROP TABLE #T1
DROP TABLE #T2
我不知道我可以使用哪种加入方式!尝试了几个,但没有得到预期的结果

我正在使用SQL Server 2012


提前谢谢

使用
完全外部连接

SELECT COALESCE(t1.a, t2.a),
       ISNULL(t1.b,'-'),
       ISNULL(t2.b,'-')
FROM   (SELECT Row_number()OVER(partition BY a ORDER BY b) AS rn,*
        FROM   #T1) t1
       FULL OUTER JOIN (SELECT Row_number()OVER(partition BY a ORDER BY b) AS rn,*
                        FROM   #T2) t2
                    ON t1.a = t2.a
                       AND t1.rn = t2.rn 

您可以将
外部联接
行编号
结合使用:

WITH t1 AS (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) AS rn
    FROM #t1
), t2 AS (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) AS rn
    FROM #t2
)
SELECT COALESCE(t1.a, t2.a) AS a,  t1.b,    t2.b
FROM t1
FULL JOIN t2
  ON t1.a = t2.a
 AND t1.rn = t2.rn;

@lad2025-是的。。没有很好地检查它我想你想要的是
ISNULL
而不是
NULLIF
:)@lad2025-我应该睡觉了我想:“
Y
为什么在结果中出现两次?重复的值是否应该显示为
-
?”?