Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получение данных за один запрос  [new]
relief
Member

Откуда:
Сообщений: 1197
привет

Есть 2 диапазона дат: @StartDate1, @EndDate1, @StartDate2, @EndDate2

Как посчитать 2 суммы по диапазону дат без 2 запросов к одной таблице вот в таком запросе?


вот запрос для одного диапазона

select c.Category, s.Total
FROM 
   (select c1.Category from Categories c1 group by Category) c
left join 
   (select sum(price) as Total, category from sales where saledate between @StartDate1 and @EndDate1) s
on c.Category = s.Category
group by c.Category
21 июн 13, 16:14    [14466879]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных за один запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Использовать CASE
21 июн 13, 16:16    [14466898]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных за один запрос  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
1. А чем вам не нравиться 2 запроса?
2. Константная табла по двум диапазопам, а далее "пивот".
3. Неужели OR тут выпадет в фул скан?
21 июн 13, 16:39    [14467068]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных за один запрос  [new]
relief
Member

Откуда:
Сообщений: 1197
2 Mnior

1. 1 запрос работает 4 сек. значит 2 - 8 секунд
2. это как?
3. а можно пример, также как и по пункту 2
21 июн 13, 16:59    [14467216]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных за один запрос  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
relief
2 Mnior

1. 1 запрос работает 4 сек. значит 2 - 8 секунд

не значит совсем..
21 июн 13, 17:01    [14467230]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных за один запрос  [new]
relief
Member

Откуда:
Сообщений: 1197
Сергей Викт.,

ну может не 2 враза больше. но больше времени
21 июн 13, 17:09    [14467292]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных за один запрос  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
relief
1. 1 запрос работает 4 сек. значит 2 - 8 секунд
Боже мой.
relief - значит кривой.
relief
2. Константная табла по двум диапазопам, а далее "пивот".

SELECT * FROM (VALUES (@From1,@To1),(@From2,@To2)) X([From],[To])
JOIN .. ON D >= X.[From] AND D < X.[To]
Агрегацию сами сделаете.
relief
3. а можно пример, также как и по пункту 2
Это не вам, это для тех кто в теме.
21 июн 13, 19:24    [14467831]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных за один запрос  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
Использовать CASE


Glory,

не нашел в инете как так сделать. Можете показать
24 июн 13, 10:51    [14472446]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных за один запрос  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2395
relief
не нашел в инете как так сделать. Можете показать

http://msdn.microsoft.com/en-us/library/ms181765.aspx
24 июн 13, 11:35    [14472813]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных за один запрос  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
relief, попробуйте такой вариант:

select
  C.Category,
  sum(case when S.saledate between @StartDate1 and @EndDate1 then S.price else 0 end) as Total1,
  sum(case when S.saledate between @StartDate2 and @EndDate2 then S.price else 0 end) as Total2
FROM Categories C
  inner join sales S on S.Category = C.Category
group by
  C.Category
24 июн 13, 11:54    [14473008]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных за один запрос  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Медвежатины расплодилось. (от выражения "медвежья услуга")
Жаль не охотничий сезон.

Шёл 42 013 год каменного века.
Бесхвостые обезьяны всё также тролили друг друга.
24 июн 13, 20:03    [14476405]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить