如何在SQL中实现复杂的流控制?

时间:2017-03-14 12:12:45

标签: sql sql-server

好的,我有一个包含这些表的数据库:

Products (ID, Producer, Name)
Producers (ID, Name)
ProductTypes (ID, Name)
ProductTypeJunction (ID, ProductID, ProductTypeID)
Transactions (ID, ProductID, Profit)

基本上,我在产品和产品类型之间存在多对多的关系,每个产品都有一个生产者。我还列出了每笔交易的清单(销售的产品)以及它赚了多少钱。

现在我需要能够做到这一点:

列出生产超过1000美元至少一种特定产品类型的生产商,这意味着它必须至少从汽车类型或家具类型中赚取1000美元。如果从多种产品类型的销售额中总计超过1000,则无关紧要。至少有一种类型必须有1000个。

似乎没有任何方法可以通过我尝试的任何SQL功能来实现这一目标。

1 个答案:

答案 0 :(得分:1)

您只需将group byhaving一起使用即可:

select
    ProducerName = pro.Name
  , TypeName     = pt.Name
  , Profit       = sum(t.Profit)
from Producers pro
  inner join Products p
    on pro.Id = p.Producer
  inner join ProductTypesJunction ptj
    on ptj.ProductId = p.Id
  inner join ProductTypes pt
    on pt.Id = ptj.ProductTypeId
  inner join Transactions t
    on t.ProductId = p.Id
group by 
    pro.Name
  , pt.Name
having sum(t.Profit)>=1000;