【问题标题】:Include "0" results in COUNT(*) aggregate在 COUNT(*) 聚合中包含“0”个结果
【发布时间】:2020-11-11 18:53:45
【问题描述】:

早上好,我在论坛中搜索了一个我有疑问的问题,但我看到的结果并没有给我一个解决方案。

我有两张桌子。

汽车:

Id    Model
1     Seat
2     Audi
3     Mercedes
4     Ford

细分:

IdBd   Description         Date         Price      IdCar
1      Engine              01/01/2020   500 €      3
2      Battery             05/01/2020   0 €        1
3      Wheel's change      10/02/2020   110,25 €   4
4      Electronic system   15/03/2020   100 €      2
5      Brake failure       20/05/2020   0 €        4
6      Engine              25/05/2020   400 €      1

我想做一个查询,以 0 欧元的成本显示每月的故障数量。

我有这个问题:

SELECT Year(breakdowns.[Date]) AS YEAR, StrConv(MonthName(Month(breakdowns.[Date])),3) AS MONTH, Count(*) AS [BREAKDOWNS]
FROM cars LEFT JOIN breakdowns ON (cars.Id = breakdowns.IdCar AND breakdowns.[Price]=0)
GROUP BY breakdowns.[Price], Year(breakdowns.[Date]), Month(breakdowns.[Date]), MonthName(Month(breakdowns.[Date]))
HAVING ((Year([breakdowns].[Date]))=[Insert a year:])
ORDER BY Year(breakdowns.[Date]), Month(breakdowns.[Date]);


结果是(如果我输入“2020”年):

YEAR   MONTH       BREAKDOWNS
2020   January     1
2020   May         1

我想要:

YEAR   MONTH       BREAKDOWNS
2020   January     1
2020   February    0
2020   March       0
2020   May         1

谢谢!

【问题讨论】:

标签: sql ms-access join count


【解决方案1】:

HAVING 条件应该在 WHERE 中(否则它将外部联接更改为内部联接)。但只要你不使用来自cars 的列,就不需要加入它。

要获得几个月的行且价格不为零,您应该切换到条件聚合(Access 不支持标准 SQL CASE,但 IIF?)。

SELECT Year(breakdowns.[Date]) AS YEAR,
   StrConv(MonthName(Month(breakdowns.[Date])),3) AS MONTH,
   SUM(CASE WHEN breakdowns.[Price]=0 THEN 1 ELSE 0 END) AS [BREAKDOWNS]
FROM breakdowns
JOIN cars
  ON (cars.Id = breakdowns.IdCar)
WHERE ((Year([breakdowns].[Date]))=[Insert a year:])
GROUP BY breakdowns.[Price], Year(breakdowns.[Date]), Month(breakdowns.[Date]), MonthName(Month(breakdowns.[Date]))
ORDER BY Year(breakdowns.[Date]), Month(breakdowns.[Date]

【讨论】:

  • 您的查询和“SUM(IIf(breakdowns.[Price]=0;1;0) AS [BREAKDOWNS]”出现语法错误
  • 缺少第二个右括号:SUM(IIf(breakdowns.[Price]=0;1;0)) AS [BREAKDOWNS]
猜你喜欢
  • 2020-08-12
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2014-02-23
  • 1970-01-01
  • 2019-10-14
相关资源
最近更新 更多