Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Использование вложенного запроса в HAVING (число прочтений - 6944 )
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Использование вложенного запроса в HAVING
Ответ #15 - 02. Июля 2008 :: 09:15
Печать  
IIF выдает: : FAILED! ICommandText::Execute(): Missing comma (,).

Рабочий код:
SELECT  
  $ДокШапка.Контрагент as [Контрагент $Справочник.Контрагенты],  
  SUM($ДокТаблица.Количество)
   
FROM  
  $ДокументСтроки.Реализация as ДокТаблица
 LEFT JOIN $Документ.Реализация as ДокШапка ON ДокШапка.IDDoc = ДокТаблица.IDDoc
WHERE $ДокТаблица.Номенклатура IN(SELECT val FROM :Параметр)
GROUP BY $ДокШапка.Контрагент

Но т.к. мне нужны различные отборы в нескольких группировках, то этот код не подходит
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование вложенного запроса в HAVING
Ответ #16 - 02. Июля 2008 :: 09:50
Печать  
Пальцем в небо: может вот это "$ДокТаблица.Номенклатура IN(SELECT val FROM :Параметр)" в скобки надо взять?
  
Наверх
 
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Использование вложенного запроса в HAVING
Ответ #17 - 02. Июля 2008 :: 09:54
Печать  
JohnyDeath писал(а) 02. Июля 2008 :: 09:50:
Пальцем в небо: может вот это "$ДокТаблица.Номенклатура IN(SELECT val FROM :Параметр)" в скобки надо взять?


FAILED! ICommandText::Execute(): Function name is missing ).

Скобки я с обеих сторон поставил  Улыбка
Неужели ни укого не возникала потребность в группировках с различными отборами?  Озадачен
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование вложенного запроса в HAVING
Ответ #18 - 02. Июля 2008 :: 10:01
Печать  
DrunkProgrammer писал(а) 02. Июля 2008 :: 09:54:
Неужели ни укого не возникала потребность в группировках с различными отборами?  Озадачен

Возникала.
И успешно решалась использованием ICASE.
Попробуй поставить самого модного OLEDB-провайдера.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Использование вложенного запроса в HAVING
Ответ #19 - 02. Июля 2008 :: 10:06
Печать  
Если я использую простое условие, то ICASE работает, например: ICASE(2>1,2,1), а вот с вложенным запросом - лажа.
Ссылку на самого модного OLEDB-провайдера не дадите? Улыбка
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Использование вложенного запроса в HAVING
Ответ #20 - 02. Июля 2008 :: 10:09
Печать  
А что это за конструкция
Код
Выбрать все
SELECT val FROM :Параметр 


???
Имеется ввиду
Код
Выбрать все
SELECT val FROM #Параметр 


?
  
Наверх
 
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Использование вложенного запроса в HAVING
Ответ #21 - 02. Июля 2008 :: 10:13
Печать  
У меня база dbf-ная, не нужно заморачиваться на "SELECT val FROM :Параметр", это рабочий код, я уже писал об этом в Ответе #9.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Использование вложенного запроса в HAVING
Ответ #22 - 02. Июля 2008 :: 10:19
Печать  
DrunkProgrammer писал(а) 02. Июля 2008 :: 10:13:
У меня база dbf-ная, не нужно заморачиваться на "SELECT val FROM :Параметр", это рабочий код, я уже писал об этом в Ответе #9.


У меня также база ДБФ, такая конструкция вызывает много вопросов, нельзя ли расшифровать - что такое
Параметр - т.е. чему он равен - Параметр=?
  
Наверх
 
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Использование вложенного запроса в HAVING
Ответ #23 - 02. Июля 2008 :: 10:23
Печать  
Вообще это я тоже писал (Ответ #7)

Запрос.УложитьСписокОбъектов(ВыбНом,ИмяТаблицы,ВыбНом.Вид());
Запрос. УстановитьТекстовыйПараметр ("Параметр", ИмяТаблицы);
Т.е. Параметр содержит имя временной таблицы.
ВыбНом - элемент диалога типа Справочник.Номенклатура


SELECT val FROM #Параметр выдает ошибку: не найдена таблица #Параметр.dbf
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Использование вложенного запроса в HAVING
Ответ #24 - 02. Июля 2008 :: 10:36
Печать  
Такой код выполняется?
Код
Выбрать все
SELECT  
   $ДокШапка.Контрагент as [Контрагент $Справочник.Контрагенты],  
   ICASE($ДокТаблица.Номенклатура IN('        1','        2'),2,1) as AAA
  
FROM  
   $ДокументСтроки.Реализация as ДокТаблица
  LEFT JOIN $Документ.Реализация as ДокШапка ON ДокШапка.IDDoc = ДокТаблица.IDDoc
  

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


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Использование вложенного запроса в HAVING
Ответ #25 - 02. Июля 2008 :: 13:34
Печать  
Код
Выбрать все
SELECT
 $ДокШапка.Контрагент as [Контрагент $Справочник.Контрагенты],
 ICASE($ДокТаблица.Номенклатура IN('        1','        2'),2,1) as AAA
FROM
 $Документ.Реализация as ДокШапка
  LEFT JOIN $ДокументСтроки.Реализация as ДокТаблица ON ДокТаблица.IDDoc = ДокШапка.IDDoc 



Выдает ошибку:  FAILED! ICommandText::Execute(): Missing comma (,).
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Использование вложенного запроса в HAVING
Ответ #26 - 02. Июля 2008 :: 14:14
Печать  
DrunkProgrammer писал(а) 02. Июля 2008 :: 08:53:
Код
SELECT  
  $ДокШапка.Контрагент as [Контрагент $Справочник.Контрагенты],
  ICASE(2>1,2,1)
 
FROM
  $ДокументСтроки.Реализация as ДокТаблица
 LEFT JOIN $Документ.Реализация as ДокШапка ON ДокШапка.IDDoc = ДокТаблица.IDDoc

отрабатывает нормально.

А код:
SELECT  
  $ДокШапка.Контрагент as [Контрагент $Справочник.Контрагенты],
  ICASE($ДокТаблица.Номенклатура IN(SELECT val FROM :Параметр),2,1)
 
FROM
  $ДокументСтроки.Реализация as ДокТаблица
 LEFT JOIN $Документ.Реализация as ДокШапка ON ДокШапка.IDDoc = ДокТаблица.IDDoc

выдает ошибку FAILED! ICommandText::Execute(): Missing comma (,).


Похоже ICASE не поддерживает подзапросы ...
Ну используй тогда обычное соединение :
Код
Выбрать все
|SELECT
 |$ДокШапка.Контрагент as [Контрагент $Справочник.Контрагенты],
 |ICASE(ISNULL(ВыбНом .val),1,2) as AAA
|FROM
| $ДокументСтроки.Реализация as ДокТаблица
|  LEFT JOIN $Документ.Реализация as ДокШапка ON ДокШапка.IDDoc = ДокТаблица.IDDoc  
|  LEFT JOIN МояТаблица as ВыбНом ON  $ДокТаблица.Номенклатура=ВыбНом .val
|";  


МояТаблица - имя твоей таблицы

P.S. Проверено - работает
  
Наверх
 
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Использование вложенного запроса в HAVING
Ответ #27 - 03. Июля 2008 :: 05:09
Печать  
kiruha писал(а) 02. Июля 2008 :: 14:14:
P.S. Проверено - работает


И у меня работает  Улыбка
Спасибо за помощь!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать