Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

Оптимизировать запрос для группировки данных

$
0
0
Добрый день. Подскажите как оптимальнее сделать следующий запрос.
Допустим есть таблица следующего формата:
DataAccountInDtKtOut
2015-02-01408178102313212311001090180
2015-02-014070281035647252320020100280
2015-02-284081781023132158930030110380
2015-02-284070281035458135140040120480
2015-03-014081781023132123150050130580
2015-03-014070281035647252360060140680
2015-03-314081781023132158970070150780
2015-03-314070281035458135180080160880

По этой таблице нужно сделать группировку по месяцам и по 5 первым символам account чтобы в итоге получилось что-то типа:
DataAcc2InDtKtOut
2015-024081740040200560
2015-024070260060220760
2015-034081712001202801360
2015-034070214001403001560


Так вот я делаю это тремя запросами, каждый из которых заново пробегает по все таблице:
select * into #in_tmp from (select left([DATA], 7)month, left(ACCOUNT, 5) acc2, SUM(in)infrom src_tbl where data like '%-%-01' group by left(ACCOUNT, 5), left([DATA], 7)) tbl;

select * into #dt_kt_tmp from (select left([data], 7)month, left(ACCOUNT, 5) acc2, sum(dt) ‘dt’, sum(kt) ‘kt’ from src_tbl where group by left(data, 7), left(ACCOUNT, 5)) tbl;

select * into #out_tmp from (select left([DATA], 7)month, left(ACCOUNT, 5) acc2, SUM(out) [out] from src_tbl where data = EOMONTH(data)	group by left(ACCOUNT, 5), left([DATA], 7)) tbl;


А потом джойню их в одну. Но мне кажется это мягко говоря не оптимально 3 раза пробегаться по одной таблице. Можно ли как-нибудь написать такой запрос, чтобы сервер пробегал по таблице только один раз и собирал сразу все три этих значения: in, dt_kt и out?

Viewing all articles
Browse latest Browse all 7251

Trending Articles