2010-12-21 63 views
0

我有以下的数据库结构:按虚拟列筛选?

[Order] 
OrderId 
Total 

[Payment] 
OrderId 
Amount 

每个订单可以有X付款行。我只想获得所有付款总额为<的订单清单,而不是订单总额。

我有以下的SQL,但我会返回所有已付和未付的订单。

SELECT o.OrderId, 
      o.UserId, 
      o.Total, 
      o.DateCreated, 
      COALESCE(SUM(p.Amount),0) AS Paid 
    FROM [Order] o 
LEFT JOIN Payment p ON p.OrderId = o.OrderId 
GROUP BY o.OrderId, o.Total, o.UserId, o.DateCreated 

我尝试添加在哪里(付费< o.Total),但它不工作,任何想法? BTM我正在使用SQL CE 3.5

回答

4

您正在寻找的是HAVING子句。

而不是 “在哪里(COALESCE(SUM(p.Amount),0)< o.Total)”,尝试 “HAVING(COALESCE(SUM(p.Amount),0)< o.Total)”

查看MSDN Reference on HAVING

+0

您可以在HAVING子句中引用列别名,而不是 – 2010-12-21 22:03:12

0
Select Order.* From Order 
Left Join 
(Select OrderID, Sum(Amount) As t From Payment Group By OrderID) As s On s.OrderID = Oder.OrderID 
Where IsNULL(s.t,0) < Order.Total