gpt4 book ai didi

sql - 在两个条件下连接两个表,如果它无法连接到带有空白单元格的行

转载 作者:行者123 更新时间:2023-12-02 08:06:12 24 4
gpt4 key购买 nike

我必须在两个条件下连接两个表。我希望如果第二个条件不成立但表 1 中有一个空白单元格(不是 null 但空白 ''),则加入该行。如果第二个条件不成立则返回零。

连接表 1 和表 2 - 返回表 2 和表 1 的第 3 列。

表一

(A, 1, 0.25),
(A, 2, 0.50),
(A, 3, 0.25),
(A, , 0.50),
(B, 1, 0.25),
(B, 2, 0.50),
(B, 3, 0.25),

表2

(A, 1),
(A, 2),
(A, 3),
(A, 5),
(B, 1),
(B, 2),
(B, 3),
(B, 5)

我要返回

(A, 1, 0.25),
(A, 2, 0.50),
(A, 3, 0.25),
(A, 5, 0.50),
(B, 1, 0.25),
(B, 2, 0.50),
(B, 3, 0.25),
(B, 5, 0.00)

最佳答案

您可以在子查询中使用 COALESCE(arg1, arg2, …) 来获取表 2 中每条记录的十进制数。COALESCE 按顺序遍历其参数,并返回第一个非空值。

这正是您想要做的:arg1:在两个条件下寻找匹配项。arg2:在表 1 中查找匹配的字母,但为 null int 值。arg3:如果 arg1 或 arg2 中没有匹配项,则返回 0

例子:

DECLARE @table1 TABLE (letter CHAR(1), num1 INT, num2 NUMERIC(5,2))
DECLARE @table2 TABLE (letter CHAR(1), num1 INT)

INSERT INTO @table1 VALUES
('A', 1, 0.25),
('A', 2, 0.50),
('A', 3, 0.25),
('A', null, 0.50),
('B', 1, 0.25),
('B', 2, 0.50),
('B', 3, 0.25)

INSERT INTO @table2 VALUES
('A', 1),
('A', 2),
('A', 3),
('A', 5),
('B', 1),
('B', 2),
('B', 3),
('B', 5)

SELECT t2.*,
COALESCE(
(SELECT TOP 1 num2 FROM @table1 WHERE letter = t2.letter AND num1 = t2.num1),
(SELECT TOP 1 num2 FROM @table1 WHERE letter = t2.letter AND num1 IS NULL),
0
) AS missing_number
FROM @table2 t2

产量:

letter  num1    missing_number
A 1 0.25
A 2 0.50
A 3 0.25
A 5 0.50
B 1 0.25
B 2 0.50
B 3 0.25
B 5 0.00

关于sql - 在两个条件下连接两个表,如果它无法连接到带有空白单元格的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51308519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com