SQL Server 2012 を使用しています。製品の注文を保持するテーブルが 2 つあります。受信日を持つ注文と、価格と注文 ID fk を持つ OrderItem。
日付範囲内のすべての注文を取得し、日付でグループ化し、すべての注文商品の価格を合計して、その日付のすべての注文の合計を取得するクエリを作成しようとしています。
私はこれを機能させています。次に、その日の合計金額と 7 日前の合計金額の差を選択する別の列を追加します。7 日前に注文がない場合、列は null になります。
したがって、現時点では以下のクエリがあります。
select cast(o.ReceivedDate as date) as OrderDate,
coalesce(count(orderItems.orderId), 0) as Orders,
coalesce(sum(orderItems.Price), 0) as Price
from [Order] o
left outer join (
select o.Id as orderId, sum(ot.Price) as Price
from OrderItem ot
join [Order] o on ot.OrderId = o.Id
where o.ReceivedDate >= @DateFrom and o.ReceivedDate <= @DateTo
group by o.Id
) as orderItems on o.Id = orderItems.orderId
where o.ReceivedDate >= @DateFrom and o.ReceivedDate <= @DateTo
group by cast(o.ReceivedDate as date)
order by cast(o.ReceivedDate as date) desc
では、このクエリに他の列を追加するにはどうすればよいでしょうか? 私は次のようなことをする必要があります:
//pseudo
if o.RecievedDate - 7 exists then orderItems.Price - Price from 7 days ago else null
しかし、これを行う方法がわかりませんか?http://sqlfiddle.com/#!6/8b837/1の説明に役立つ sqlfiddle を作成しました
私のサンプルデータから、私が達成したいのは次のような結果です:
| ORDERDATE | ORDERS | PRICE | DIFF7DAYS |
---------------------------------------------
| 2013-01-25 | 3 | 38 | 28 |
| 2013-01-24 | 1 | 12 | null |
| 2013-01-23 | 1 | 10 | null |
| 2013-01-22 | 1 | 33 | null |
| 2013-01-18 | 1 | 10 | null |
| 2013-01-10 | 1 | 3 | -43 |
| 2013-01-08 | 2 | 11 | null |
| 2013-01-04 | 1 | 1 | null |
| 2013-01-03 | 3 | 46 | null |
ご覧のとおり、25日は7日前の注文なので差額が表示されています。24日はそうではないのでnullが表示されます。
どんな助けでも大歓迎です。