【发布时间】:2020-11-14 08:56:47
【问题描述】:
我在下面写了一个查询以从四个表中检索
Sales_Invoice, New_Customer, Company_Information, Expense
查询:
select
isnull(sum(Expense.Expense_Amount), 0.00), as ExpenseAmount,
Company_Information.Company_Name,
Sales_Invoice.Invoice_No, Sales_Invoice.Invoice_Date, Sales_Invoice.Item_Name,
New_Customer.Customer_Name, New_Customer.Customer_ID
from
Sales_invoice, Company_Information, New_Customer, Expense
where
Sales_Invoice.Customer_Id = New_Customer.Customer_ID
and Sales_Invoice.Invoice_No = Expense.Invoice_No
group by
Company_Information.Company_Name,
Sales_Invoice.Invoice_No, Sales_Invoice.Invoice_Date, Sales_Invoice.Customer_ID,
Sales_Invoice.Item_Name, New_Customer.Customer_Name, New_Customer.Customer_ID
查询运行良好,但如果Expense 表没有值Expense.Invoice_No 与Sales_Invoice.Invoice_No 不匹配,则上面的查询将返回空行。
但我想做的是,如果Expense.Invoice_No 不存在,那么我仍然希望我的行提供该费用金额返回 0.00
【问题讨论】:
-
对于这个问题,我会将“上面的查询运行良好”的情绪更改为“它执行”,或者其他类似的东西;因为,如果连接没有产生您期望的结果,则查询不会“正常工作”。另外,上面的代码 sn -p
, as ExpenseAmount似乎是错误的。 -
@Brett Caswell 如果我将某些内容保存在费用表中,则上面的查询有效,但如果我没有保存,我希望它返回 null
-
很久以前你就不再使用那个古老的连接语法了;它在 27 年前被取代!
-
Bad Habits to Kick : Using old-style JOINs。如果您切换到正确的
LEFT JOIN,很可能您可以实现您的目标 -
您的隐式连接中也缺少
Company_Information;转向正确的连接语法的另一个原因。
标签: c# sql sql-server sum left-join