查询 return sales 排除结果为 0
Query to return sales excludes results that are 0
我搜索了这个并发现了这个问题,适用于大多数人的解决方案(使用外部联接)对我不起作用。我最初有一个内部连接,并将其切换为外部连接,但我得到了相同的结果。这是基于某些帐号,它显示了他们的总销售额。如果一个帐户的销售额为 0,则它不会显示,而我需要它显示。这是我的查询。
Select a.accountnumber, SUM(a.totalsales) as Amount, c.companyname
FROM Sales a LEFT OUTER JOIN Accounts c on (a.Accountnumber = c.Accountnumber)
WHERE a.Salesdate between '1/1/2016' and '1/27/2016'
AND a.Accountnumber in ('1','2','3','4')
GROUP BY a.Accountnumber, c.companyname
我会得到如下结果:
Accountnumber | Amount | Company
1 | 250.00 | A
3 | 500.00 | B
由于帐号 2 和 4 没有金额,因此没有显示。我希望他们像
一样出现
Accountnumber | Amount | Company
1 | 250.00 | A
2 | 0 | B
3 | 250.00 | C
4 | 0 | D
我怎样才能做到这一点?任何帮助,将不胜感激。谢谢!
将其更改为 RIGHT OUTER JOIN,它应该可以工作。
左连接表示将所有内容保留在左侧 table,即左连接之前的 table,即使它在第二个 table 中不存在。在您的情况下,我当然希望没有没有帐户的销售。要保留所有帐户,即使他们没有销售,您也需要 RIGHT 外部连接。或者,您可以更改 tables 的顺序并执行 FROM Accounts c LEFT OUTER JOIN Sales a ...
编辑..
盲人明白了。 RIGHT OUTER JOIN 是您需要按照编写方式使用的内容,但是对于 2 和 4 的销售 table 列中的所有值,您都有一个空值,因此帐号不能在 ( 1,2,3,4) 或日期之间,这样他们就不会进入结果。
你应该有两个选择。
首先从 Accounts table 将查询修改为 select,然后加入 Sales table。
FROM Accounts c
LEFT OUTER JOIN Sales a on (a.Accountnumber = c.Accountnumber)
使用右连接而不是左连接。
FROM Sales a
RIGHT OUTER JOIN Accounts c on (a.Accountnumber = c.Accountnumber)
我觉得RIGHT JOIN
不行,因为WHERE
有条件。
试试这个:
SELECT
c.accountnumber,
COALESCE(SUM(a.totalsales),0) AS Amount,
c.companyname
FROM Accounts c
LEFT OUTER JOIN Sales a
ON a.Accountnumber = c.Accountnumber
AND a.Salesdate BETWEEN '1/1/2016' AND '1/27/2016'
WHERE
c.Accountnumber IN ('1', '2', '3', '4')
GROUP BY c.Accountnumber, c.companyname
澄清一下,问题不在于使用了哪个 JOIN,也可以,但在不存在的 (NULL) 值上使用 WHERE 条件,因为所有来自外部联接 table 的不匹配值都是NULL 无论如何,应用任何条件,实际上使这些连接成为内部连接(除非它们是 IS NULL 条件),请参阅:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
我搜索了这个并发现了这个问题,适用于大多数人的解决方案(使用外部联接)对我不起作用。我最初有一个内部连接,并将其切换为外部连接,但我得到了相同的结果。这是基于某些帐号,它显示了他们的总销售额。如果一个帐户的销售额为 0,则它不会显示,而我需要它显示。这是我的查询。
Select a.accountnumber, SUM(a.totalsales) as Amount, c.companyname
FROM Sales a LEFT OUTER JOIN Accounts c on (a.Accountnumber = c.Accountnumber)
WHERE a.Salesdate between '1/1/2016' and '1/27/2016'
AND a.Accountnumber in ('1','2','3','4')
GROUP BY a.Accountnumber, c.companyname
我会得到如下结果:
Accountnumber | Amount | Company
1 | 250.00 | A
3 | 500.00 | B
由于帐号 2 和 4 没有金额,因此没有显示。我希望他们像
一样出现Accountnumber | Amount | Company
1 | 250.00 | A
2 | 0 | B
3 | 250.00 | C
4 | 0 | D
我怎样才能做到这一点?任何帮助,将不胜感激。谢谢!
将其更改为 RIGHT OUTER JOIN,它应该可以工作。
左连接表示将所有内容保留在左侧 table,即左连接之前的 table,即使它在第二个 table 中不存在。在您的情况下,我当然希望没有没有帐户的销售。要保留所有帐户,即使他们没有销售,您也需要 RIGHT 外部连接。或者,您可以更改 tables 的顺序并执行 FROM Accounts c LEFT OUTER JOIN Sales a ...
编辑.. 盲人明白了。 RIGHT OUTER JOIN 是您需要按照编写方式使用的内容,但是对于 2 和 4 的销售 table 列中的所有值,您都有一个空值,因此帐号不能在 ( 1,2,3,4) 或日期之间,这样他们就不会进入结果。
你应该有两个选择。
首先从 Accounts table 将查询修改为 select,然后加入 Sales table。
FROM Accounts c LEFT OUTER JOIN Sales a on (a.Accountnumber = c.Accountnumber)
使用右连接而不是左连接。
FROM Sales a RIGHT OUTER JOIN Accounts c on (a.Accountnumber = c.Accountnumber)
我觉得RIGHT JOIN
不行,因为WHERE
有条件。
试试这个:
SELECT
c.accountnumber,
COALESCE(SUM(a.totalsales),0) AS Amount,
c.companyname
FROM Accounts c
LEFT OUTER JOIN Sales a
ON a.Accountnumber = c.Accountnumber
AND a.Salesdate BETWEEN '1/1/2016' AND '1/27/2016'
WHERE
c.Accountnumber IN ('1', '2', '3', '4')
GROUP BY c.Accountnumber, c.companyname
澄清一下,问题不在于使用了哪个 JOIN,也可以,但在不存在的 (NULL) 值上使用 WHERE 条件,因为所有来自外部联接 table 的不匹配值都是NULL 无论如何,应用任何条件,实际上使这些连接成为内部连接(除非它们是 IS NULL 条件),请参阅:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins