任务:提供可用书籍的列表,标明其数量、价格
问题是使用子查询,即应该在哪里使用以及如何使用?如何删除重复记录并找出一条记录共有的两个表的总和之间的差异?
给出表4(不需要1来解决问题):
BooksArrive - IdBookArrive、IdKnowledgeArea、目录索引、计数、到达日期
图书销售 - IdSale、IdKnowledgeArea、CatalogIndex、Count、SellingPrice、SellDate
书籍 - CatalogIndex、IdKnowledgeArea、作者、名称、发布日期、成本
Select b.Name, b.Cost, (ba."Count" - SUM(bs."Count")) as Remain
From BooksSales as bs, Books as b, BooksArrive as ba
Where (bs.CatalogIndex = b.CatalogIndex) AND (ba.CatalogIndex = b.CatalogIndex) AND ((ba."Count" - bs."Count") > 0)
GROUP BY b.Name, b.Cost, ba."Count"
由于任务尚未明确制定,因此还不是一个完整的答案,而是一个行动指南:
本质:
CatalogIndex
数量对书籍进行分组,不需要数量,理论上不同书籍的书名和价格可以相同JOIN ... ON
,这样更清晰LEFT JOIN
+ISNULL
可以让您正确处理某些书籍没有交付或销售的情况最后的销售价格可以通过单独的子查询或使用窗口函数获得,或者您可以按书籍对销售进行分组,获取每个组的最大销售 ID,然后将销售与这些 ID 附加在一起并从中获取销售价格。也许这更容易做到,但我无法立即弄清楚。