我需要展示那些没有销售的书籍。共有14本书。我只得到11.我不确定是否需要使用汇总将空值显示为0或其他。 ISNULL没有在表中工作。以下是我试图获得结果。
select b.ISBN
, b.TITLE
, b.RETAIL
, b.COST
, round(sum((b.RETAIL- b.COST)/b.COST*100),2)||'%' "Profit Percentage"
, count(*) as "Book Count"
from BOOKS b
, ORDERITEMS oi
, ORDERS o
where b.ISBN = oi.ISBN
and oi.ORDER# = o.ORDER#
group by(b.ISBN, b.TITLE, b.RETAIL, b.COST)
;
答案 0 :(得分:1)
您的查询不会返回尚未订购的图书的信息。您正在使用的隐含连接,FROM
子句中列出的多个表,用作内部连接,这意味着对于任何数据,每个工作簿的数据必须存在于所有三个表中由查询返回。如果所有表中都不存在,则需要使用外部连接来返回数据:
select b.ISBN
, b.TITLE
, b.RETAIL
, b.COST
, round(sum((b.RETAIL- b.COST)/b.COST*100),2)||'%' "Profit Percentage"
, count(*) as "Book Count"
from BOOKS b
LEFT OUTER JOIN ORDERITEMS oi
ON oi.ISBN = b.ISBN
LEFT OUTER JOIN ORDERS o
ON o.ORDER# = oi.ORDER#
group by(b.ISBN, b.TITLE, b.RETAIL, b.COST)