SQL查询-如果没有找到记录,则返回0



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

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

返回的只有一行,如下所示。

客户tbody> <<tr>
地址行数日期
3射频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'

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

dbfiddle联系

假设客户在一个表(cust)中,其他东西在另一个表(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放在一个表中,并将主表左连接到它。所有其他条件必须放在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';

你也可以传入一个表值参数,或者使用一个表变量。别忘了添加一个主键。

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';

最新更新