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

Откуда:
Сообщений: 12
Всем привет. Помогите правильно написать join. Исходные данные такие:
WeekTochkaProdagiQ-ty
2014-0112
2014-0128
2014-0136
2014-0215
2014-0224
2014-0234
2014-0319
2014-0321
2014-0337
2014-0410
2014-0424
2014-0431
2014-0510
2014-0525
2014-0536
2014-0610
2014-0628
2014-0635


Для 4-6 недели нужно расчитать среднее 4х недельное значение продаж для каждой точки. Среднее 4х недельное значение для точки 1 за 6ю неделю расчитывается как продажи за 3-6 делить на 4. За 5ю неделю для точки 1 = продажи за 2-5 недели делить на 4 и т.д.

Я думал переджойнить таблицу саму с собой при условии t1.week>=t2.week and t1.TochkaProdagi = t2.TochkaProdagi, затем сгрупировать по t1.week, t1.TochkaProdagi и просумировать t2.Q-ty, но не могу ограничить только 4мя неделями.

После join хочется получить табл вида (для примера покажу только на одной точке):
WeekTochkaProdagiQ-tyWeek2TochkaProdagi2Q-ty2
2014-06102014-0610
2014-06102014-0510
2014-06102014-0410
2014-06102014-0319


Заранее спасибо за помощь, или подскажите в каком направлении искать.
22 мар 14, 19:08    [15771416]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно написать join  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Ну и где код который вы думали?
SashaKh
Заранее спасибо за помощь, или подскажите в каком направлении искать.
Искать надо всегда в документации. Чё BookOnLine (BOL, msdn) тяжело зайти и посмотреть синтаксис?
SashaKh
Я думал переджойнить таблицу саму с собой при условии t1.week>=t2.week and t1.TochkaProdagi = t2.TochkaProdagi, затем сгрупировать по t1.week, t1.TochkaProdagi и просумировать t2.Q-ty, но не могу ограничить только 4мя неделями.
Что-то не вижу в условии ограничение 4мя неделями. Только одно условие снизу, меньше-равно текущей, а где ограничение сверху?
Или вам лень найти список имеющихся функций в документации? За лень по головке не погладят.

PS: Ещё пройдите курсы sql-ex.ru и будет вам понимание.
23 мар 14, 01:11    [15772639]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно написать join  [new]
SashaKh
Member

Откуда:
Сообщений: 12
Вот мой код который я придумал:
SELECT	t1.Week
	,t1.TochkaProdagi
	,t1.Q-ty
	,t2.Week
	,t2.TochkaProdagi
	,t2.Q-ty
FROM	Sales t1 INNER JOIN Sales t2
	ON  (t1.Week >= t2.Week and t1.TochkaProdagi = t2.TochkaProdagi)
              
 


Я понимаю, что в INNER JOIN должно быть еще условие, но не пойму какое.

Mnior
Или вам лень найти список имеющихся функций в документации? За лень по головке не погладят.


Если бы я нашел нужную функцию, я бы на форум не писал.
23 мар 14, 09:48    [15772986]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно написать join  [new]
SashaKh
Member

Откуда:
Сообщений: 12
Еще хочу уточнить, что Week хранится не как дата, а как Varchar :(. Но с этим ничего поделать не могу.
23 мар 14, 10:03    [15772996]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно написать join  [new]
o-o
Guest
показываю, как соединить, а со средним сами разбирайтесь, ок?
declare @Sales table
(Week varchar(7), TochkaProdagi int, Qty int)

insert into @Sales values
('2014-01',	1,	2),
('2014-01',	2,	8),
('2014-01',	3,	6),
('2014-02',	1,	5),
('2014-02',	2,	4),
('2014-02',	3,	4),
('2014-03',	1,	9),
('2014-03',	2,	1),
('2014-03',	3,	7),
('2014-04',	1,	0),
('2014-04',	2,	4),
('2014-04',	3,	1),
('2014-05',	1,	0),
('2014-05',	2,	5),
('2014-05',	3,	6),
('2014-06',	1,	0),
('2014-06',	2,	8),
('2014-06',	3,	5)

--SELECT	t1.Week
--	,t1.TochkaProdagi
--	,t1.Qty
--	,t2.Week
--	,t2.TochkaProdagi
--	,t2.Qty

select *
FROM	@Sales t1 INNER JOIN @Sales t2
	ON  (t1.Week >= t2.Week and t1.TochkaProdagi = t2.TochkaProdagi 
	and cast(right(t1.Week, 2) as int) - cast(right(t2.Week, 2) as int) between 0 and 3)
where t1.TochkaProdagi = 1 and cast(right(t1.Week, 2) as int) between 4 and 6
order by 1	
----------------------------
Week	TochkaProdagi	Qty	Week	TochkaProdagi	Qty
2014-04	1	0	2014-01	1	2
2014-04	1	0	2014-02	1	5
2014-04	1	0	2014-03	1	9
2014-04	1	0	2014-04	1	0
2014-05	1	0	2014-02	1	5
2014-05	1	0	2014-03	1	9
2014-05	1	0	2014-04	1	0
2014-05	1	0	2014-05	1	0
2014-06	1	0	2014-03	1	9
2014-06	1	0	2014-04	1	0
2014-06	1	0	2014-05	1	0
2014-06	1	0	2014-06	1	0
23 мар 14, 11:33    [15773039]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить