Sql server 有点';标量积';在SQL Server中
我有这两个临时表,正在尝试构造一个select,返回以下结果: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,
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
为什么在结果中出现两次?重复的值是否应该显示为-
?”?