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
子句过滤客户。
当没有找到记录时,我希望看到特定字段 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
子句过滤客户。