我有两个表,一个定价表和一个订单项订单表。定价表具有每个数量的价格,这意味着一个部分将具有多个价格点,具体取决于有序数量
1 --------- 95.00
13 -------- 85.00
我的订单表已订购总数量。我想弄清楚每个数量点的订单数量。给我带来问题的一个原因是每个部分都会有不同的定价细分。我会使用一组 - 有吗?我认为这样做不会很好。还有其他功能我应该研究一下吗?我可以得到每个项目及其订单和支付了多少但是通过数量细分来计算订单数量的最佳方法是什么?对不起,如果解释不清楚:)
定价表示例
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
这只是该产品的数量细分,其他产品有不同的断点。
答案 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