当没有找到记录时,我希望看到特定字段返回0值。以下是我到目前为止尝试过的SQL查询。
SELECT Customer, Address, Number of lines, Date
FROM table_name
WHERE Date = '30-5-2022' AND Customer IN (A, B, C)
返回的只有一行,如下所示。
地址 | 行数 | 日期 | 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';