我不确定这是否可行 - 我真的遇到了麻烦。
这是针对产品计划,显示我们预计在给定日期交付的数量。每周将数据导入此计划,这将创建一个新条目。
例如,如果当天的日程安排总计为10,并且导入15,则会插入一个新行,数量为5,将总和设为15。
我的数据是这样的:
Product | Delivery Required Date | Qty
Prod1 | 1/1/13 | 10
Prod1 | 1/1/13 | -10
Prod1 | 1/1/13 | 10
Prod1 | 1/1/13 | -10
Prod1 | 1/1/13 | 25
我想设计一个查询,显示上一个时间表和当前时间表之间的差异。
例如,查询将汇总所有行“Qty”,不包括最后一个条目 - 并将其与最后一个条目进行比较。在上面的数据中,方差为25(现有总数为0,最新条目为25,0 + 25 = 25)。
这可能吗?
由于
答案 0 :(得分:0)
我怀疑使用Common Table Expressions有更好的答案,但是快速和快速。丑陋的解决方案可能是
select sum(case when EntryNo <> MAX(EntryNo) then Qty else 0 end) as 'sumLessLast'
from MyTable
如果MyTable
中有一百万行,您需要一个更好的解决方案。
答案 1 :(得分:0)
SqlServer 2005和2008:
;with r1 as (
select DeliveryReqDate, sum(Qty) as TotalQty
from TableName
group by DeliveryReqDate)
, r2 as (
select DeliveryReqDate, Qty
, row_number() over (partition by DeliveryReqDate order by EntryNo desc) rn
from TableName)
select r1.DeliveryReqDate, r1.TotalQty, r2.Qty as LastQty
, r1.TotalQty - r2.Qty as TotalButLastQty
from r1
join r2 on r2.DeliveryReqDate = r1.DeliveryReqDate and r2.rn = 1
SqlServer 2012
;with r1 as (
select DeliveryReqDate, Qty
, sum(Qty) over (partition by DeliveryReqDate) as TotalQty
, row_number() over (partition by DeliveryReqDate order by EntryNo desc) rn
from TableName)
select DeliveryReqDate, TotalQty, Qty as LastQty
, TotalQty - Qty as TotalButLastQty
from r1
where rn = 1
我不确定我是否完全理解有关产品和日期会计的逻辑,但我希望您能够根据您的需求调整上述查询。