2010-12-21 62 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