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

Откуда:
Сообщений: 23
Всем привет. Прошу помощи в реализации запроса, т.к. моего скромного опыта самоучки не хватает для решения этой задачи. Есть Две таблицы - Одна - дата-цифры, вторая - наименования-цифры. Необходимо каждую цифру из второй таблицы разделить пропорционально количеству дней и цифрам первой таблицы и так по каждому наименованию второй таблицы. Общих столбцов и ключа для связывания нет.

Пример:

Первая таб:

Дата План
01.02.2016 0:00 22 386 063
02.02.2016 0:00 23 733 929
03.02.2016 0:00 23 357 494
04.02.2016 0:00 24 210 725
05.02.2016 0:00 40 681 894
06.02.2016 0:00 33 267 659
07.02.2016 0:00 30 069 039
08.02.2016 0:00 25 431 218
09.02.2016 0:00 25 725 412
10.02.2016 0:00 26 228 740
11.02.2016 0:00 26 442 448
12.02.2016 0:00 25 579 022
13.02.2016 0:00 81 592 453
14.02.2016 0:00 20 340 400
15.02.2016 0:00 48 846 368

Вторая:

группа план продаж
Группа1 852 990
Группа2 1 182 694
Группа2 3 551 200

Должно получиться:

Дата Група1 план
01.02.2016 0:00 39957
02.02.2016 0:00 42363
03.02.2016 0:00 41691
04.02.2016 0:00 43214
05.02.2016 0:00 72613
06.02.2016 0:00 59379
07.02.2016 0:00 53670
08.02.2016 0:00 45392
09.02.2016 0:00 45917
10.02.2016 0:00 46816
11.02.2016 0:00 47197
12.02.2016 0:00 45656
13.02.2016 0:00 145634
14.02.2016 0:00 36306
15.02.2016 0:00 87186
22 фев 16, 08:01    [18850429]     Ответить | Цитировать Сообщить модератору
 Re: Связывание без ключа с проведением вычислений  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
declare @t1 table ( dt date, [plan] int );
insert into @t1
values 
  ( '20160201', 22386063 )
, ( '20160202', 23733929 )
, ( '20160203', 23357494 )
, ( '20160204', 24210725 )
, ( '20160205', 40681894 )
, ( '20160206', 33267659 )
, ( '20160207', 30069039 )
, ( '20160208', 25431218 )
, ( '20160209', 25725412 )
, ( '20160210', 26228740 )
, ( '20160211', 26442448 )
, ( '20160212', 25579022 )
, ( '20160213', 81592453 )
, ( '20160214', 20340400 )
, ( '20160215', 48846368 );

declare @t2 table ( g char(7), [plan] int );
insert into @t2
values 
  ( 'Группа1', 852990 )
, ( 'Группа2', 1182694 )
, ( 'Группа3', 3551200 );

with t1
as
(
select *
, [plan]*1. / ( sum([plan]) over () ) [%]
  from @t1
)
, t2
as
(
select * from @t2
pivot ( max([plan]) for g in ( [Группа1], [Группа2], [Группа3] ) ) p
)
select t1.dt
     , cast( t1.[%] * t2.[Группа1] as decimal(10,0) ) as [Группа1]
     , cast( t1.[%] * t2.[Группа2] as decimal(10,0) ) as [Группа2]
     , cast( t1.[%] * t2.[Группа3] as decimal(10,0) ) as [Группа3]  
  from t1 cross join t2;
22 фев 16, 17:57    [18851715]     Ответить | Цитировать Сообщить модератору
 Re: Связывание без ключа с проведением вычислений  [new]
ИгорьST
Member

Откуда:
Сообщений: 23
Alexey, спасибо за решение. Узучу основательно, предстоит решить несколько схожих задач. Про pivot и мах только читал, теперь буду курить на практике. С % - логичной подход, тоже думал сперва их вычислять.
22 фев 16, 22:18    [18852301]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить