SQL 查询 - Return 如果没有找到记录,列为 0

SQL query - Return 0 for the column if no record found

当没有找到记录时,我希望看到特定字段 returns 的值为 0。 以下是我迄今为止尝试过的 SQL 个查询。

SELECT Customer, Address, Number of lines, Date 
FROM table_name 
WHERE Date = '30-5-2022' AND Customer IN (A, B, C)

它 returns 只有 1 行,如下所示。

Customer Address Number of Lines Date
A 3 RF 30-5-2022

但我希望看到的是:

Customer Address Number of Lines Date
A UK 33 30-5-2022
B 0 0 30-5-2022
C 0 0 30-5-2022

客户 B 和 C 在 2022 年 5 月 30 日没有记录,但我仍需要查看行,但某些列可以为 0。 请告知我是否遗漏了什么?非常感谢!

假设客户在一个 table (cust) 中,其他东西在另一个 table (table_name) 中,并且他们与一个名为 custid 的 ID 相关联,您需要一些甜食,甜左加入动作,如:

SELECT c.Customer, c.Address, isnull([Number of lines],0), d.Date 
FROM cust c left join  table_name d on c.custid = d.custid and 
d.Date = '30-5-2022' where 
c.Customer IN ('A', 'B', 'C')

您需要将 A、B、C 放在 table 中,而 left-join 主要 table 放在其中。所有其他条件必须进入 ON 子句而不是 WHERE.

您可以为此使用虚拟 VALUES 子句

SELECT Customer, Address, Number of lines, Date 
FROM (VALUES
 ('A'),
 ('B'),
 ('C')
) v(Customer)
LEFT JOIN table_name tn ON tn.Customer = v.Customer
                        AND tn.Date = '30-5-2022';

或者,您可以传入 Table 值参数,或使用 table 变量。不要忘记添加主键。

DECLARE @tmp TABLE (Customer varchar(100) PRIMARY KEY);
INSERT @tmp(Customer) VALUES
 ('A'),
 ('B'),
 ('C');

SELECT Customer, Address, Number of lines, Date 
FROM @tmp v
LEFT JOIN table_name tn ON tn.Customer = v.Customer
                        AND tn.Date = '30-5-2022';

尝试以下查询:

SELECT A.Customer, ISNULL(B.Address, 0), 
ISNULL(B.[Number of lines],0), ISNULL(B.Date, '30-05-2022') Date
FROM
(
 SELECT DISTINCT Customer 
 FROM table_name
) A
LEFT JOIN table_name B
ON A.Customer = B.Customer
AND B.Date = '30-5-2022'

这将输出 table 中存在的所有客户。您可以根据您的要求在上述查询的末尾使用 WHERE 子句过滤客户。

dbfiddle Link