1

これが可能かどうかはわかりません-頭を悩ませています。

これは製品スケジュール用で、特定の日にどれだけの配送が期待されるかを示しています。データは毎週このスケジュールにインポートされ、新しいエントリが作成されます。

たとえば、その日のスケジュールの現在の合計が 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)。

これは可能ですか?

ありがとう

4

2 に答える 2

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

商品と日付の計算に関するロジックを完全に理解しているかどうかはわかりませんが、上記のクエリをニーズに合わせて調整していただければ幸いです。

于 2013-07-22T16:30:05.317 に答える
0

共通テーブル式を使用したより良い答えがあると思いますが、迅速で醜い解決策は

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

100 万行ある場合MyTableは、より良いソリューションが必要になります。

于 2013-07-22T11:54:02.827 に答える