2013-07-22 62 views
1

我不確定這是否可能 - 我真的很難解決這個問題。比較表中數據的2個子集?

這是一個產品時間表,顯示我們期望在給定的日期交付多少。數據每週導入到此時間表中,創建一個新條目。

例如,如果當天的日程目前總計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

你在桌子上有主鍵嗎? (每個記錄具有唯一的ID號碼)?這將使查詢更容易。 –

+0

我確實,在這個例子中,我已經簡化了很多數據。 「Entry No」是PK。 我有一個想法,也許計算可能是: 所有行的總和,減去2 *最後一行的數量?如果它使得它更容易 – user2401849

回答

0

我懷疑使用通用表表達式there'a更好的答案,但一個快速&醜陋的解決方案可能是

select sum(case when EntryNo <> MAX(EntryNo) then Qty else 0 end) as 'sumLessLast' 
from MyTable 

如果MyTable中有一百萬行,你會希望有一個更好的解。

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 

我不知道是否完全瞭解有關產品和日期的會計邏輯,但我希望你能適應以上查詢您的需求。