创建列出某些数据无论是否存在的SQL查询

问题描述

我试图创建一个查询,该查询列出某些项目,无论它们是否出现在数据库中。假设我有一个数据库,其中列出了水果库存,并且包含以下内容

Fruit     Amount
Apples    5
Bananas   8
Oranges   9

但是我想返回一个检查所有水果类型的结果,如果找不到它们,则返回0。

Fruit     Amount
Apples    5
Apricots  0
Bananas   8
Grapes    0
Oranges   9

我正在使用sql Server 2008。

这是我在stackoverflow上遇到的第一个问题,请原谅我做错了什么。我尝试过使用“选择进入”临时表,但是在检查“是否存在”的同时也想不出如何使用选择进入。

任何帮助将不胜感激。谢谢!

解决方法

您可以枚举派生表中的可能值,然后将原始表中添加left join,最后进行汇总和计数:

select f.fruit,count(t.fruit) amount
from (values ('Apples'),('Abricots'),('Bananas'),('Grape'),('Oranges')) as f(fruit)
left join mytable t on t.fruit = f.fruit
group by f.fruit

在现实生活中,您将拥有一个引用表,该表存储了所有可能的值,例如all_fruits,这将避免使用values()

select f.fruit,count(t.fruit) amount
from all_fruits f
left join mytable t on t.fruit = f.fruit
group by f.fruit

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...