试图从数量细分中获得定价

时间:2015-02-26 18:00:02

标签: sql sql-server

我有两个表,一个定价表和一个订单项订单表。定价表具有每个数量的价格,这意味着一个部分将具有多个价格点,具体取决于有序数量

  1. 1 --------- 95.00

  2. 13 -------- 85.00

  3. 3000 ------ 65.00
  4. 我的订单表已订购总数量。我想弄清楚每个数量点的订单数量。给我带来问题的一个原因是每个部分都会有不同的定价细分。我会使用一组 - 有吗?我认为这样做不会很好。还有其他功能我应该研究一下吗?我可以得到每个项目及其订单和支付了多少但是通过数量细分来计算订单数量的最佳方法是什么?对不起,如果解释不清楚:)

    定价表示例

    Item #-------QTY-------Price
    525001-------1-------59.00
    525001-------8-------55.00
    525001-------13------45.00
    

    订单表

    Order #-------item#-------item_qty------unit_cost
    51788---------525001------9-------------55.00
    51789---------525001------2-------------59.00
    51790---------525001------50000---------45.00
    

    这只是该产品的数量细分,其他产品有不同的断点。

2 个答案:

答案 0 :(得分:0)

declare @prices table
(
    id int identity(1,1),
    item int,
    Qty int,
    Price float
)

declare @orders table
(
    id int identity(1000,1),
    item int,
    item_qty int
)

insert into @prices (item, Qty, Price)
values 
(525001,1, 59),
(525001,8, 55),
(525001,13, 45)

insert into @orders (item, item_qty)
values
(525001,9),
(525001,2),
(525001,50000)

select Id, max(Price) as retail_price, sum(Item_qty) as items_sold, count(IdOrder) as orders_count
 from
(
    select 
        o.item_qty,
        o.Id as idOrder,
        p.*,
        ROW_NUMBER() over (partition by o.Item, o.Id order by p.Qty desc) as num
    from @orders o
    join @prices p on p.Item = o.Item and p.Qty <= o.item_qty   
) T
where t.num = 1
group by id, item

/* 
Id  retail_price    items_sold  orders_count
1   59              2           1
2   55              9           1
3   45              50000       1
*/

答案 1 :(得分:0)

我说实话,我还没有彻底检查过这个SQL,但我很确定你可以使用以下内容来完成任务:

WITH OrdersPricing AS (
    SELECT
        ot.OrderId,
        (SELECT TOP(1) pt.PriceId
        FROM PriceTable pt
        WHERE pt.Qty > ot.Qty
        ORDER BY pt.Qty DESC) AS PriceId)
    FROM
        OrdersTable ot
)
SELECT
    op.PriceId,
    COUNT(*)
FROM
    OrdersPricing op
GROUP BY
    op.PriceId