Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Использовать CASE |
21 июн 13, 16:16 [14466898] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
1. А чем вам не нравиться 2 запроса? 2. Константная табла по двум диапазопам, а далее "пивот". 3. Неужели OR тут выпадет в фул скан? |
21 июн 13, 16:39 [14467068] Ответить | Цитировать Сообщить модератору |
relief Member Откуда: Сообщений: 1197 |
2 Mnior 1. 1 запрос работает 4 сек. значит 2 - 8 секунд 2. это как? 3. а можно пример, также как и по пункту 2 |
21 июн 13, 16:59 [14467216] Ответить | Цитировать Сообщить модератору |
Сергей Викт. Member Откуда: Москва Сообщений: 888 |
не значит совсем.. |
||
21 июн 13, 17:01 [14467230] Ответить | Цитировать Сообщить модератору |
relief Member Откуда: Сообщений: 1197 |
Сергей Викт., ну может не 2 враза больше. но больше времени |
21 июн 13, 17:09 [14467292] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
relief - значит кривой.
SELECT * FROM (VALUES (@From1,@To1),(@From2,@To2)) X([From],[To]) JOIN .. ON D >= X.[From] AND D < X.[To]Агрегацию сами сделаете.
|
||||||
21 июн 13, 19:24 [14467831] Ответить | Цитировать Сообщить модератору |
relief Member Откуда: Сообщений: 1197 |
Glory, не нашел в инете как так сделать. Можете показать |
||
24 июн 13, 10:51 [14472446] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2395 |
http://msdn.microsoft.com/en-us/library/ms181765.aspx |
||
24 июн 13, 11:35 [14472813] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Медвежатины расплодилось. (от выражения "медвежья услуга") Жаль не охотничий сезон. Шёл 42 013 год каменного века. Бесхвостые обезьяны всё также тролили друг друга. |
24 июн 13, 20:03 [14476405] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |