【问题标题】:Create SQL query that lists certain data whether it exists or not创建列出某些数据(无论它是否存在)的 SQL 查询
【发布时间】:2020-08-31 15:09:52
【问题描述】:

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

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 with coalesce(Amount,0)
  • 使用包含所有这些水果的表进行左连接
  • 有没有各种水果的桌子?
  • 这是一个常见问题解答。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。

标签: sql sql-server count left-join


【解决方案1】:

你可以在一个派生表中枚举可能的值,然后把原表带上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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多