【发布时间】:2013-04-29 01:37:45
【问题描述】:
我有一个使用 TOTAL() 聚合函数的 SQL 查询:
SELECT
c.Id,
c.Name,
...
b.BatchNumber,
TOTAL(d.OrderedAmount) as TotalOrderedAmount
FROM OrderProducts a
LEFT JOIN WarehouseProducts b ON a.WarehouseProductId = b.Id
...
WHERE a.OrderId = @OrderId
AND (e.Status = @OrderedStatus OR e.Status IS NULL)
(为清楚起见,删除了无关的行)
即使没有找到结果,该查询也至少返回一行,导致每一列都是 DBNull(我假设)。当我尝试将此查询的结果加载到 DataTable 中时,由于 null 值,我得到了一个 ConstraintException。
如果我将TOTAL() 行替换为0 as TotalOrderedAmount,则返回的行数为0,一切正常。
我尝试过使用WHERE a.Id IS NOT NULL,但无论我尝试什么,似乎总是至少返回一行。
如何修改此查询,以便在未找到产品时返回的行数为 0,即使使用聚合函数?
【问题讨论】:
-
可能的解决方法是this question 答案中的扩展方法,它允许您在没有约束的情况下加载 DataTable。
标签: c# sqlite null aggregate-functions