需要Oracle sql查询帮助

时间:2013-12-18 06:05:27

标签: sql oracle

我需要编写一个应该执行以下操作的查询:

涉及三个实体让我们说A,B,C,我必须找到C的列表

sum(C.noOfOrders) < B.maxNoOfOrders where A.BID = B.ID and B.ID = C.BID and A.RunId = C.RunId

注意:sum(C.noOfOrders)表示C结果中noOfOrders的总和应小于B.maxNoOfOrders。

请向我提出解释说明。

以下示例数据:

A

ID  | RunId | BID
------------------
100 | 1001 | 100 
200 | 1002 | 200
300 | 1003 | 300
400 | 1004 | 400

ID    |  maxNoOfOrders
-----------------------
100 | 50    
200 | 10
300 | 50
400 | 15

C

  Id | RunId |  BID |  noOfOrders
-----------------------------------
 101 | 1001  | 100  |  10
 102 | 1001  | 100  |  10
 103 | 1003  | 200  |  20 
 104 | 1004  | 300  |  50
 200 | 1001  | 100  |  10
 201 | 2002  | 100  |  10
 300 | 3001  | 200  |  50
 401 | 4001  | 300  |   5
 402 | 4002  | 400  |  10

这应返回ID为101,102和200的C列表,因为(10 + 10 + 10)&lt; 50

1 个答案:

答案 0 :(得分:1)

您需要使用GROUP BYHAVING条款:

   SELECT C.Id
     FROM C
     JOIN B ON B.ID = C.BID
     JOIN A ON A.BID = B.ID AND A.RunId = C.RunId
 GROUP BY C.Id
   HAVING sum(C.noOfOrders) < B.maxNoOfOrders