2016-03-07 64 views
0

在我的情況下用戶將選擇城市,位置,開始和結束日期,不同大小的籃子以及每個大小數量(如需要多少個此大小的籃子) 。如何創建返回兩個不同組的存儲過程

之後,點擊搜索按鈕。

我想返回的結果將根據提供程序進行排序。例如,如果提供者A具有所有這些籃子,則他的籃子將首先出現,然後B提供者籃子也具有所有這些籃子。其他提供者(誰有一些有序的籃子,即使它是一個)之後。我也希望供應商A和B按價格排序。對於A和B之後的其他提供者也是如此。

是否可以在一個將被調用一次的存儲過程中進行此操作?如果是的話如何? 我剛剛瞭解了關於sql程序的內容,我對此不甚瞭解。

+1

使用的標記dbms。 (許多產品都有自己的存儲過程版本,不符合ANSI SQL標準。) – jarlh

+0

現在標記了它。 – Nysa

回答

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)