如何创建返回两个不同组的存储过程

时间:2016-03-07 11:24:10

标签: sql-server stored-procedures procedure

在我的情况下,用户将选择城市,位置,开始和结束日期,不同大小的篮子以及每个尺寸的数量(例如您想要多少个这样大小的篮子)。

之后点击搜索按钮。

我希望将返回的结果根据提供程序进行排序。例如,如果提供者A拥有所有这些篮子,那么他的篮子将首先出现,然后是B提供者篮子,他们也拥有所有这些篮子。其他提供者(即使它是一个有一些有序的篮子)之后。我还希望供应商A和B按价格排序。 A和B之后的其他提供者也是如此。

是否可以在一个将被调用一次的存储过程中进行此操作?如果有,怎么样? 我刚刚了解了sql程序,我对此并不了解。

1 个答案:

答案 0 :(得分:0)

这很难。因此,该地区的供应商提供不同大小的篮子,您希望这些篮子与所需的篮子相匹配。您想要提供几个篮子数量。

您想要的篮子尺寸有一个子查询,可用篮子尺寸有一个子查询。您将后者加入第一个,然后根据供应情况和价格按提供商和订单汇总。

以下查询应指向正确的方向。我想以此为基础,您可以编写所需的查询:

select 
  provider,
  case when sum(missing) = 0 then 
    'available for ' || sum(price) 
  else
    sum(missing) ' baskets not available'
  end as offer
from
(
  select 
    available.provider, 
    wanted.size, 
    greatest(wanted.amount - available.amount, 0) as missing,
    wanted.amount * available.price as price
  from
  (
    select 'S' as size, 2 as amount
    union all
    select 'M' as size, 5 as amount
    union all
    select 'L' as size, 16 as amount
  ) wanted
  left join 
  (
    select provider, size, amount, price
    from baskets
    where city = @city
    and location = @location
  ) available on available.size = wanted.size
) balanced
group by provider
order by sum(missing), sum(price)