0

如何在 mydate 之间查询 SUM 字段总计和 WHERE 但行仍然存在,只需将值总计更改为 0。请查看我的解释如下:

我有两个表,名称是category_resultresult_values

以下是表category_result的结构和值:

id       name   
1        One    
2        Two    
3        Three  
4        Four   
5        Five  

以下是表result_values的结构和值:

id_category_value       mydate         total
1                       2013-04-24     2
2                       2013-04-25     3
3                       2013-05-10     1
4                       2013-06-20     8
5                       2013-06-21     3
5                       2013-06-22     2
5                       2013-06-23     2

我现在的查询是:

SELECT c.name, SUM(rv.total) as total_all FROM category_result c
LEFT JOIN result_values rv ON c.id=rv.id_category_value 
WHERE rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
GROUP BY c.id

并会得到如下结果:

name      total_all
Three     1
Four      8
Five      7

但我想要的不是这样,我想要的结果大致是这样的:

name      total_all
One       0
Two       0
Three     1
Four      8
Five      7

所以我想要一个名字仍然存在,但是如果上面的 mydate 的位置,那么名字 One 和 Two 没有按 mydate 列出,所以我希望行中的值 total_all 为 null 或 0。

提前致谢。

4

3 回答 3

2

您只需要将 where 子句移动到联接中。否则,这将排除所有没有日期的 category_results:

SELECT c.name, COALESCE(SUM(rv.total),0) as total_all 
FROM category_result c
LEFT JOIN result_values rv ON c.id=rv.id_category_value AND rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
GROUP BY c.id

请注意,我们使用 COALESCE,否则 One 和 Two 的总和将为 null 而不是 0。

于 2013-09-11T07:20:49.560 回答
1

使用另一个联接。

SELECT t1.name, t2.total_all
FROM category_result t1
LEFT JOIN
(
SELECT c.id, SUM(rv.total) as total_all FROM category_result c
LEFT JOIN result_values rv ON c.id=rv.id_category_value 
WHERE rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
GROUP BY c.id
) t2 ON t1.id = t2.id
于 2013-09-11T07:16:32.373 回答
1

使您的Sum查询成为嵌套查询并JOIN使用数据

SELECT ct.name, ISNULL(s.total_all, 0) FROM category_result cr
LEFT JOIN (
  SELECT id_category_value, SUM(rv.total) as total_all FROM result_values  
  WHERE rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
  GROUP BY c.id
) s rv ON cr.id = s.id_category_value

并且Where语句可以移出。

于 2013-09-11T07:16:58.650 回答