Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Первый запрос - попинайте (число прочтений - 1738 )
ANik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 66
Зарегистрирован: 03. Мая 2007
Первый запрос - попинайте
03. Мая 2007 :: 10:50
Печать  
Только начал изучать
Запрос из двух регистров объединил с помощью Union
Не понравилось, что не сгруппировалось по Товару/Клиенту
Решил "свернуть" получившийся запрос - не работает.
Большая просьба помочь найти ошибку, а еще лучше рассказать, как писАть красиво и эффективно.
     |Select Товар, Клиент, Sum(Заказ) As Заказ, Sum(Отгрузка) As Отгрузка
     |From(
     |Select
     |  Zakaz.Товар as Товар,
     |  Zakaz.Клиент as Клиент,
     |  Zakaz.КоличествоОстаток as Заказ,
     |      CAST(0 as int(17,2)) As Отгрузка
     |from $РегистрОстатки.Заказы(
     |,right join "+ТаблицаФильтраНоменклатуры+" as FiltrNom On FiltrNom.Val=Товар
     | right join "+ТаблицаФильтраКлиентовЗаказы+" as FiltrKlient On FiltrKlient.Val=Клиент
     |,,(Товар,Клиент),Количество) as Zakaz
     |      Union
     |      Select
     |              Otgruzka.Товар as Товар,
     |              Otgruzka.Клиент as Клиент,
     |            CAST(0 as int(17,2)) As Заказ,
     |              Otgruzka.КоличествоОстаток as Отгрузка
     |      from $РегистрОстатки.Отгрузка(
     |,right join "+ТаблицаФильтраНоменклатуры+" as FiltrNom On FiltrNom.Val=Товар
     | right join "+ТаблицаФильтраКлиентовОтгрузки+" as FiltrKlient On FiltrKlient.Val=Клиент
     |,,(Товар,Клиент),Количество) as Otgruzka)
     |      Group by Товар,Клиент
  
Наверх
 
IP записан
 
ANik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 66
Зарегистрирован: 03. Мая 2007
Re: Первый запрос - попинайте
Ответ #1 - 03. Мая 2007 :: 11:01
Печать  
Опаньки - извините. Всего лишь добавил в последнюю строку " As ТупойUnion" и все заработало. Представляю, сколько еще всего всплывет.
  
Наверх
 
IP записан
 
ANik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 66
Зарегистрирован: 03. Мая 2007
Re: Первый запрос - попинайте
Ответ #2 - 03. Мая 2007 :: 12:13
Печать  
Итого почитавши ФАК, получил следующую работающую конструкцию:
     |Select Товар as [Товар $Справочник.Номенклатура], Sum(Заказ) As Заказ, Sum(Отгрузка) As Отгрузка
     |From(
     |Select
     |  Zakaz.Товар as Товар,
     |  Zakaz.Клиент as Клиент,
     |  Zakaz.КоличествоОстаток as Заказ,
     |      CAST(0 as int(17,2)) As Отгрузка
     |from $РегистрОстатки.Заказы(,,
     |      Товар in (Select val from "+ТаблицаФильтраНоменклатуры+")
         |                           And
         |      Клиент in (Select val from "+ТаблицаФильтраКлиентовЗаказы+")
     |,(Товар,Клиент),Количество) as Zakaz
     |      Union
     |      Select
     |              Otgruzka.Товар as Товар,
     |              Otgruzka.Клиент as Клиент,
     |            CAST(0 as int(17,2)) As Заказ,
     |              Otgruzka.КоличествоОстаток as Отгрузка
     |      from $РегистрОстатки.Отгрузка(,,
     |      Товар in (Select val from "+ТаблицаФильтраНоменклатуры+")
         |                           And
         |      Клиент in (Select val from "+ТаблицаФильтраКлиентовОтгрузки+")
     |,(Товар,Клиент),Количество) as Otgruzka) As ТупойUnion
     |      Group by Товар
Вопрос зрителям: является ли данный запрос эффективным/оптимальным.
Просто хотелось бы заодно чтобы не просто работало, а еще и стиль выработать.
  
Наверх
 
IP записан
 
Rem Ryahirev
YaBB Newbies
*
Отсутствует



Сообщений: 8
Местоположение: Барнаул
Зарегистрирован: 22. Марта 2007
Пол: Мужской
Re: Первый запрос - попинайте
Ответ #3 - 11. Мая 2007 :: 21:35
Печать  
Так-то всё нормально, но например, можно CAST не писать, а просто "0 as Отгрузка "...
вместо джойнов "right join "+ТаблицаФильтраНоменклатуры+" as FiltrNom On FiltrNom.Val=Товар
    | right join "+ТаблицаФильтраКлиентовЗаказы+" as FiltrKlient On FiltrKlient.Val=Клиент"
можно просто использовать УложитьСписокОбъектов() и "Клиент IN (select val from "+ТаблицаФильтраКлиентовЗаказы+")" (если, конечно, не необходимо получить всех клентов, используемых в джойнах, даже и с нулевыми показателями). UNION нужно указывать ALL, чтобы попадали _все_ позиции с нулевыми суммами (ну если требуется).
А в остальном, всё нормально, вполне эффективно (коли это работает) и оптимально (если можно об этом говорить по сравнению прямых запросов и эски  Ужас)  Смех
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать