Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) громоздкий запрос (число прочтений - 7849 )
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: громоздкий запрос
Ответ #15 - 17. Июня 2009 :: 15:28
Печать  
Спасибо1

Поставщик - реквизит товара, поэтому JOIN к общей потом сделаю и по поставщику GROUP BY будет. А склад нужен только для фильтрации на уровне РегистрОстаткиОбороты.

Если через Join не выйдет сделаю через Union. Но пока хочу проверить на жизнеспособность этот вариант
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: громоздкий запрос
Ответ #16 - 17. Июня 2009 :: 20:27
Печать  
вместо Рег.Товар as [Товар $Справочник.Товары]

coalesce(Рег.Товар, Рег1.Товар) as [Товар $Справочник.Товары]

у тебя же full join
http://msdn.microsoft.com/ru-ru/library/ms190349.aspx
  
Наверх
 
IP записан
 
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: громоздкий запрос
Ответ #17 - 18. Июня 2009 :: 06:27
Печать  
kiruha писал(а) 17. Июня 2009 :: 20:27:
вместо Рег.Товар as [Товар $Справочник.Товары]

coalesce(Рег.Товар, Рег1.Товар) as [Товар $Справочник.Товары]

у тебя же full join
http://msdn.microsoft.com/ru-ru/library/ms190349.aspx



Сейчас код дошел до такого:

Код
Выбрать все
SELECT                    
	Рег.Товар as [Товар $Справочник.Товары],
	Рег.БазоваяСтоимостьНачальныйОстаток as НОстКолС,
	Рег.БазоваяСтоимостьКонечныйОстаток as КОстКолС,  
	Рег.ОстатокТовараНачальныйОстаток as НОстКол,  
	Рег.ОстатокТовараКонечныйОстаток as КОстКол,
	Рег.ООстЗакС,
	Рег.ООстЗак
FROM
	$РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата,:КонДата~,,,,(1=1) AND (Товар = :ВыбТовар),(Товар), (БазоваяСтоимость,ОстатокТовара)) as Рег

FULL JOIN
(	SELECT                    
	Рег1.Товар as [Товар $Справочник.Товары],    
	Рег1.БазоваяСтоимостьОборот as ООстЗакС,  
	Рег1.ОстатокТовараОборот as ООстЗак      
FROM
	$РегистрОбороты.Закупки(:НачДата,:КонДата~,,,(1=1) AND (Товар = :ВыбТовар),(Товар), (БазоваяСтоимость,ОстатокТовара)) as Рег1) as ВРег1 ON (ВРег1.Товар = Рег.Товар)
 



Пошагово:
1. формируется Рег1: Товар,БазоваяСтоимостьОборот,ОстатокТовараОборот,...
2. из нее выбирается Врег1, состоящая из 3х столбцов Товар,ООстЗакС,ООстЗак.
3. Врег1 присоединяется к Рег (Товар,БазоваяСтоимостьНачальныйОстаток,БазоваяСтоимостьКонечныйОстаток,...)  по полю Товар, которое есть и там и там. Из итоговой таблицы выбираются поля Товар, НОстКолС, КОстКолС, НОстКол, КОстКол, ООстЗакС, ООстЗак.

выдает ошибку:
Invalid column name 'Товар'.

а зачем делать coalesce(Рег.Товар, Рег1.Товар) можете пояснить?
У меня же по этому полю идет join - оно же одно общее

  
Наверх
 
IP записан
 
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: громоздкий запрос
Ответ #18 - 18. Июня 2009 :: 06:56
Печать  
Все, спасибо! Разобрался.

coalesce там не нужен - были другие ошибки.
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: громоздкий запрос
Ответ #19 - 18. Июня 2009 :: 07:23
Печать  
Bibr писал(а) 18. Июня 2009 :: 06:56:
coalesce там не нужен - были другие ошибки.

нужен-нужен) почитайте про Full Outer Join
  
Наверх
 
IP записан
 
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: громоздкий запрос
Ответ #20 - 18. Июня 2009 :: 07:36
Печать  
alexdd писал(а) 18. Июня 2009 :: 07:23:
Bibr писал(а) 18. Июня 2009 :: 06:56:
coalesce там не нужен - были другие ошибки.

нужен-нужен) почитайте про Full Outer Join



ну не знаю, - столбец товар у меня ж общий.
пока вроде работает, тестирую...

а где почитать не подскажете?
  
Наверх
 
IP записан
 
Roman N Bugrov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 17. Июня 2009
Re: громоздкий запрос
Ответ #21 - 18. Июня 2009 :: 07:41
Печать  
Books OnLine  Подмигивание
  
Наверх
 
IP записан
 
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: громоздкий запрос
Ответ #22 - 18. Июня 2009 :: 07:48
Печать  
а где его взять на русском?
  
Наверх
 
IP записан
 
Roman N Bugrov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 17. Июня 2009
Re: громоздкий запрос
Ответ #23 - 18. Июня 2009 :: 07:56
Печать  
скачать с сайта microsoft, хотя зачем он на русском и так все понятно. можно еще почитать MSDN
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: громоздкий запрос
Ответ #24 - 18. Июня 2009 :: 08:03
Печать  
Bibr писал(а) 18. Июня 2009 :: 07:36:
alexdd писал(а) 18. Июня 2009 :: 07:23:
Bibr писал(а) 18. Июня 2009 :: 06:56:
coalesce там не нужен - были другие ошибки.

нужен-нужен) почитайте про Full Outer Join



ну не знаю, - столбец товар у меня ж общий.
пока вроде работает, тестирую...

а где почитать не подскажете?


Если у тебя в первой таблице не будет товара с остатками, а во второй будет товар с закупками -
твой код приведет что Рег.Товар будет NULL
  
Наверх
 
IP записан
 
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: громоздкий запрос
Ответ #25 - 18. Июня 2009 :: 08:16
Печать  
kiruha писал(а) 18. Июня 2009 :: 08:03:
Если у тебя в первой таблице не будет товара с остатками, а во второй будет товар с закупками -
твой код приведет что Рег.Товар будет NULL


а разве такое может быть при условии, что объединение у меня по полю товар?
я считал, что Full join = left + right.

Т.Е. у меня же условие join - это равенство товаров. как он присоединит пустой товар? это нарушит условие присоединения
  
Наверх
 
IP записан
 
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: громоздкий запрос
Ответ #26 - 18. Июня 2009 :: 08:18
Печать  
почитал про full join здесь:
http://msdn.microsoft.com/ru-ru/library/ms191494(SQL.90).aspx

противоречия с моими представлениями не нашел
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: громоздкий запрос
Ответ #27 - 18. Июня 2009 :: 08:33
Печать  
пример
Код
Выбрать все
declare @a table(id int not null,somedata char(1) not null primary key(id))
declare @b table(id int not null,somedata char(1) not null primary key(id))

insert into @a select 1,'A' union all select 2,'B'
insert into @b select 1,'A' union all select 3,'C'

select
 a.id		     a_id,
 coalesce(a.id,b.id)  id,
 a.somedata,
 b.somedata
from
 @a a
full join
 @b b on b.id = a.id 

  
Наверх
 
IP записан
 
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: громоздкий запрос
Ответ #28 - 18. Июня 2009 :: 11:53
Печать  
Объясните тогда кто может на словах а не с посылом по ссылке, что же делают JOINы. Почему необходимо применять coalesce ведь поле одно???
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: громоздкий запрос
Ответ #29 - 18. Июня 2009 :: 12:07
Печать  
почему же одно когда два
вот еще ссылка http://msdn.microsoft.com/ru-ru/library/ms187518.aspx
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать