【问题标题】:How to create stored procedure that returns two different groups如何创建返回两个不同组的存储过程
【发布时间】:2016-03-07 11:24:09
【问题描述】:

在我的例子中,用户将选择城市、位置、开始和结束日期、不同尺寸的篮子和每个尺寸的数量(比如你想要多少个这个尺寸的篮子)。

然后点击搜索按钮。

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

是否可以在一个只调用一次的存储过程中实现这一点?如果是怎么办? 最近才学sql过程,不太了解。

【问题讨论】:

  • 标记使用的 dbms。 (许多产品都有自己的存储过程版本,不符合 ANSI SQL。)

标签: sql-server stored-procedures procedure


【解决方案1】:

这是相当困难的。因此,该地区的供应商提供不同尺寸的篮子,您希望这些篮子与所需的篮子相匹配。您希望提供几个篮子金额。

您将有一个用于所需篮子尺寸的子查询和一个用于可用篮子尺寸的子查询。您将后者外连接到第一个,然后按供应商汇总并根据可用性和价格订购。

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

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多