Я использую SQL Server 2012. У меня есть две таблицы для хранения заказов на продукты. Заказ, который имеет полученную дату и OrderItem, который имеет идентификатор цены и заказа fk.SQL sub select if exists
Я пытаюсь написать запрос, получить все заказы в диапазоне дат, сгруппировать их по дате, а затем суммировать всю стоимость позиций заказа, чтобы получить общее количество всех заказов на эту дату.
У меня этот рабочий. Теперь я хочу добавить еще один столбец, чтобы выбрать разницу между общей ценой за этот день и 7 дней назад. Если заказов нет 7 дней назад, то столбец должен быть нулевым.
Так что в данный момент у меня есть ниже запрос:
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
Но я не уверен, как это сделать? Я создал sqlfiddle, чтобы помочь объяснить http://sqlfiddle.com/#!6/8b837/1
Так из моих образцов данных, что я хочу достичь, это приводит, как это:
| 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-й номер не отображается так.
Любая помощь будет высоко оценена.
Ох! Самые сложные! – flup