在我的情况下,用户将选择城市,位置,开始和结束日期,不同大小的篮子以及每个尺寸的数量(例如您想要多少个这样大小的篮子)。
之后点击搜索按钮。
我希望将返回的结果根据提供程序进行排序。例如,如果提供者A拥有所有这些篮子,那么他的篮子将首先出现,然后是B提供者篮子,他们也拥有所有这些篮子。其他提供者(即使它是一个有一些有序的篮子)之后。我还希望供应商A和B按价格排序。 A和B之后的其他提供者也是如此。
是否可以在一个将被调用一次的存储过程中进行此操作?如果有,怎么样? 我刚刚了解了sql程序,我对此并不了解。
答案 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)