Sql 已选择分组但不相关的记录

Sql 已选择分组但不相关的记录,sql,Sql,我正在尝试构建一个SQL查询(应该可以在Oracle和SQL server上运行)。我的桌子: CATEGORIES: ID: PK DESCRIPTION: Varchar(255) 例:1:水果;2:蔬菜;3:肉类 例:1:香蕉;2:苹果;3:鸡蛋 例:1:香蕉:水果;2:苹果:水果 正如你所见,有些食物与类别无关(例如鸡蛋) 示例:1:红香蕉:香蕉:2,99美元;2:大鸡蛋:鸡蛋:1,87美元 我想建立一个查询,列出所有类别及其总成本,即使食品与类别无关(称为“其他”),如下所示: Fr

我正在尝试构建一个SQL查询(应该可以在Oracle和SQL server上运行)。我的桌子:

CATEGORIES:
ID: PK
DESCRIPTION: Varchar(255)
例:1:水果;2:蔬菜;3:肉类

例:1:香蕉;2:苹果;3:鸡蛋

例:1:香蕉:水果;2:苹果:水果

正如你所见,有些食物与类别无关(例如鸡蛋)

示例:1:红香蕉:香蕉:2,99美元;2:大鸡蛋:鸡蛋:1,87美元

我想建立一个查询,列出所有类别及其总成本,即使食品与类别无关(称为“其他”),如下所示:

Fruits:  $10,00
Vegetables: $0
Meats: $99,00
Others: $15,00

我该怎么做呢?

左加入
分组方式

select c.description,
       coalesce(sum(i.cost), 0) as cost
from categories c left join
     category_foods cf
     on c.id = cf.category_id left join
     items i
     i.food_id = cf.food_id
group by c.description;

我发现要遵循栏目的命名惯例有点困难,但应该很清楚栏目之间的关系。

关键思想是使用类别合并将其他栏目归入“其他栏目”

选择
合并(c.DESCRIPTION,'Others')| |':'| | cast(合并(总和(i.COST),0)为varchar)
从…起
食品f
左连接i.FOOD=f.FOOD上的项目i
左键连接[CATEGORIES X FOODS]cf on cf.FOOD=f.ID
在c.ID=cf.CATEGORY上左连接类别c
按合并分组(c.说明“其他”)
关于“其他”记录(其食品不在分类中的项目)如何处理?@aseolin。“我想建立一个查询,列出所有类别及其总成本”。
ITEMS
ID: PK
NAME: Varchar(255)
FOOD: FOODS_FK
COST: MONEY
Fruits:  $10,00
Vegetables: $0
Meats: $99,00
Others: $15,00
select c.description,
       coalesce(sum(i.cost), 0) as cost
from categories c left join
     category_foods cf
     on c.id = cf.category_id left join
     items i
     i.food_id = cf.food_id
group by c.description;