查询以输出不在主表中的项目,并为其提供一个值,说明它不存在



所以我有一个看起来像这样的表格:

item_name |成本 项目1 |14 项目2 |20 项目2 |50 项目3 |75 项目3 |15

查询如下所示:

选择item_name,从item_name item_costs("项目1"、"项目2"、"项目3"、"项目4"(中求和(成本(,按item_name分组

它通常会输出的是项目的名称和成本总和。看起来像这样:

item_name |成本 项目1 |14 项目2 |70 项目3 |90

我们希望它输出的是查询中的所有项目。如果项目不在主表中,它可以输出"-1"或"0",在本例中为 Item4。我们应该如何修改我们的查询来做到这一点?

您可以使用values()构造和执行left join

select t.item_name, isnull(sum(tc.Cost), 0) as Cost
from ( values ('Item1'), . . , ('Item4')
) t(item_name) left join
item_costs ic
on ic.item_name = t.item_name
group by t.item_name;

你需要使用left join;我会建议values()

select v.item_name, coalesce(sum(ic.cost), 0) as cost
from (values ('Item1'), ('Item2'), ('Item3'), ('Item4')) v(item_name) left join
item_costs ic
on ic.item_name = i.item_name
group by v.item_name;

最新更新