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

Откуда:
Сообщений: 30
Есть таблица транзакций, у каждой транзакции есть два поля категории (А и В), а также время транзакции.
Надо получить такую выборку:
указывается год и надо разбить все транзакции которые были в указанном году и месяцам и получить количество транзакций по месяцам в указанном году + чтобы также были группы по категориям, а не просто результирующая сумма за месяц.
20 окт 09, 19:18    [7813991]     Ответить | Цитировать Сообщить модератору
 Re: Обработка дат  [new]
O_val
Member

Откуда:
Сообщений: 157
select год, месяц, категория, count()
group by год, месяц, категория
20 окт 09, 19:26    [7814009]     Ответить | Цитировать Сообщить модератору
 Re: Обработка дат  [new]
cyssima
Member

Откуда:
Сообщений: 30
O_val,

не все так просто.
Еще задается интервал за который надо выдать отчет. Так вот если в месяце, который попадает в интервал не было транзакций, то должен быть 0.
20 окт 09, 19:28    [7814015]     Ответить | Цитировать Сообщить модератору
 Re: Обработка дат  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
с таблицечкой - календарём заджойнте, в чём проблема ?
20 окт 09, 19:30    [7814022]     Ответить | Цитировать Сообщить модератору
 Re: Обработка дат  [new]
cyssima
Member

Откуда:
Сообщений: 30
Ken@t,

ну а вот нету ее. Вот если у нас еще к тому же можно длину интервала менять - типо не месяц, а три дня, сутки, 5 часов. Тогда как?
20 окт 09, 19:32    [7814030]     Ответить | Цитировать Сообщить модератору
 Re: Обработка дат  [new]
iljy
Member

Откуда:
Сообщений: 8711
cyssima,

тогда с таблицей-счетчиком, а интервалы вычисляйте на лету, опять же - какие проблемы?
20 окт 09, 19:35    [7814039]     Ответить | Цитировать Сообщить модератору
 Re: Обработка дат  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
select 
DATEADD( month,number , '20081001')
from master..spt_values where type = 'P'
20 окт 09, 19:37    [7814043]     Ответить | Цитировать Сообщить модератору
 Re: Обработка дат  [new]
iljy
Member

Откуда:
Сообщений: 8711
cyssima,

declare	@StartDate datetime, @EndDate datetime, @NInt int
declare @step int 
set @step = datediff(s, @StartDate, @EndDate) / @NInt

;with Intervals(Id, IntBegin, IntEnd) as
(
	select number Id, dateadd(s, @step * number, @StartDate), dateadd(s, @step * (number +1), @StartDate)
	from master.dbo.spt_values where type = 'P' and number < @NInt
)
select * from
	(
		(select * from Intervals) M_I outer apply
		(select count(case Cat when 'A' then 1 end) countA,
                                 count(case Cat when 'A' then 1 end) countB
                        from Trans
                        where Date >= IntBegin and Date < IntEnd
                      ) dt
	) t
20 окт 09, 19:43    [7814061]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить