Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Помогите пожалуйста с запросом (число прочтений - 1650 )
squirrel
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 06. Июня 2007
Помогите пожалуйста с запросом
20. Января 2009 :: 12:09
Печать  
базы dbf
В запросе выбираются все обученные в справочнике Обучение (подчиненный справочнику Контрагенты) по заданному учителю за период.  Все выполняется.

|SELECT
| СпрО.ID  as [Элемент $Справочник.Обучение] ,
| СпрО.DESCR as Обученный,
| СпрО.SP9630 as НомерУровня,
| СпрО.SP9623 as Уровень,
| СпрО.SP9628 as ДатаВыдачи,  
| Спр.ID as [ЭлементОрг $Справочник.Контрагенты] ,
| Спр.Descr as Организация,
| Спр.SP9262 as Обслуж,
|   $Спр.КатегорияНагрузка as [Кат $Перечисление.я_КатегорияНагрузка],  
|   СпрП.ID as [ЭлементП $Справочник.Пользователи],
|   ICASE(ALLTRIM(СпрО.SP9625)<>'0',СпрП.Descr,' ') as ФИООбуч1,
|   СпрП2.ID as [ЭлементП2 $Справочник.Пользователи],
|   ICASE(ALLTRIM(СпрО.SP9626)<>'0',СпрП2.Descr,' ') as ФИООбуч2
|FROM
|   $Справочник.я_Обучение as СпрО
|   LEFT JOIN $Справочник.я_Контрагенты as Спр  ON Спр.ID =СпрО.Parentext
|   LEFT JOIN $Справочник.Пользователи СпрП ON СпрП.ID = СпрО.SP9625
|      LEFT JOIN $Справочник.Пользователи СпрП2 ON СпрП2.ID = СпрО.SP9626
|Where      
|      СпрО.SP9664=0
|      AND  СпрО.ISMARK=' '  
|      AND  СпрО.SP9628 BETWEEN :НачДата~~ AND :КонДата~~
|      AND  (ALLTRIM(СпрО.SP9625)=ALLTRIM(Substr(:ВыбОбучающие~,5)) OR ALLTRIM(СпрО.SP9626)=ALLTRIM(Substr(:ВыбОбучающие~,5)))";


     Запрос.УстановитьТекстовыйПараметр("НачДата",НачДата);
     Запрос.УстановитьТекстовыйПараметр("КонДата",КонДата);  
     Запрос.УстановитьТекстовыйПараметр("ВыбОбучающие",ВыбОбучающие);

Но при этом в найденных организациях надо найти количество всех обученных.      
добавляю в запрос
|LEFT JOIN
|(
|   SELECT  COUNT(*)
|   FROM $Справочник.Обучение as СпрОб
|   WHERE
|       СпрОб.Parentext=СпрО.Parentext
|)
обработка выплевывает CommandText::Execute(): Syntax error.
Просмотрела в поиске темы с агрегатными функциями, но так ничего и не получилось. Подскажите пожалуйста.  Плачущий
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: Помогите пожалуйста с запросом
Ответ #1 - 20. Января 2009 :: 12:23
Печать  
попробуй SELECT  COUNT(id)
  
Наверх
 
IP записан
 
GEORG
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 43
Зарегистрирован: 15. Мая 2008
Re: Помогите пожалуйста с запросом
Ответ #2 - 20. Января 2009 :: 12:25
Печать  
Добавить в запрос 1 as количество, а потом свернуть по клиенту
  
Наверх
 
IP записан
 
squirrel
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 06. Июня 2007
Re: Помогите пожалуйста с запросом
Ответ #3 - 20. Января 2009 :: 12:46
Печать  
(1)спасибо за участие, но не прокатило
(2) свернуть - имеется в виду GROUP BY  ?
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: Помогите пожалуйста с запросом
Ответ #4 - 20. Января 2009 :: 12:46
Печать  
извиняюсь
попробуй заменить
Код
Выбрать все
|LEFT JOIN
|(
|   SELECT  COUNT(*)
|   FROM $Справочник.Обучение as СпрОб
|   WHERE
|	 СпрОб.Parentext=СпрО.Parentext
|) 


на что-то вроде
Код
Выбрать все
|LEFT JOIN
|	(	select
|			count(СпрСотр.id) as кол
|			,СпрО.Parentext as Parentext
|		from
|			$Справочник.Обучение as СпрО
|		group by СпрО.Parentext
|) as s1 on s1.Parentext=спр.id
 


и в первый select добавлять s1.кол
  
Наверх
 
IP записан
 
squirrel
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 06. Июня 2007
Re: Помогите пожалуйста с запросом
Ответ #5 - 20. Января 2009 :: 13:38
Печать  
|SELECT
| СпрО.ID  as [Элемент $Справочник.Обучение] ,
| СпрО.DESCR as Обученный,
| СпрО.SP9630 as НомерУровня,
| СпрО.SP9623 as Уровень,
| СпрО.SP9628 as ДатаВыдачи, 
| Спр.ID as [ЭлементОрг $Справочник.Контрагенты] ,
| Спр.Descr as Организация,
| Спр.SP9262 as Обслуж,
| $Спр.КатегорияНагрузка as [Кат $Перечисление.я_КатегорияНагрузка], 
| СпрП.ID as [ЭлементП $Справочник.Пользователи],
| ICASE(ALLTRIM(СпрО.SP9625)<>'0',СпрП.Descr,' ') as ФИООбуч1,
| СпрП2.ID as [ЭлементП2 $Справочник.Пользователи],
| ICASE(ALLTRIM(СпрО.SP9626)<>'0',СпрП2.Descr,' ') as ФИООбуч2
|,s1.кол
|FROM
|   $Справочник.я_Обучение as СпрО
|   LEFT JOIN $Справочник.я_Контрагенты as Спр  ON Спр.ID =СпрО.Parentext
|   LEFT JOIN $Справочник.Пользователи СпрП ON СпрП.ID = СпрО.SP9625
|      LEFT JOIN $Справочник.Пользователи СпрП2 ON СпрП2.ID = СпрО.SP9626
|LEFT JOIN
|(
|   SELECT  COUNT(СпрОб.id) as кол
|    ,СпрОб.Parentext as Parentext
|   FROM $Справочник.Обучение as СпрОб
|   WHERE
|      group by СпрОб.Parentext
|) as s1 on s1.Parentext=Спр.ID
|Where      
|      СпрО.SP9664=0
|      AND  СпрО.ISMARK=' ' 
|      AND  СпрО.SP9628 BETWEEN :НачДата~~ AND :КонДата~~
|      AND  (ALLTRIM(СпрО.SP9625)=ALLTRIM(Substr(:ВыбОбучающие~,5)) OR ALLTRIM(СпрО.SP9626)=ALLTRIM(Substr(:ВыбОбучающие~,5)))";

Syntax error.
Где туплю?
Спасибо. Продолжу попытки завтра, у нас глубокий вечер. пора домой.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Помогите пожалуйста с запросом
Ответ #6 - 20. Января 2009 :: 13:47
Печать  
Код
Выбрать все
  WHERE
|	group by СпрОб.Parentext 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать