Фильтровать по виртуальному столбцу? - PullRequest
0 голосов
/ 22 декабря 2010

У меня следующая структура базы данных:

[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

Я попытался добавить Where (Paid

Ответы [ 2 ]

4 голосов
/ 22 декабря 2010

То, что вы ищете, это предложение HAVING.

Вместо «Где (COALESCE (SUM (p.Amount), 0)

Проверьте справку MSDN на HAVING .

0 голосов
/ 22 декабря 2010
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
...