Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема GROUP BY clause is missing or invalid (число прочтений - 2346 )
OnCheck
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 130
Зарегистрирован: 12. Декабря 2007
GROUP BY clause is missing or invalid
07. Октября 2008 :: 13:04
Печать  
Продолжаю писать прямые запросы на SQL параллельно разбираясь с самим SQL возникают вопросы:

Пишу:
           База = СоздатьОбъект("OLEDBData");
           Соединение="
           |Provider=VFPOLEDB.1;
           //      |Deleted=Yes;
           |Null = Yes;
           |Exclusive = No;
           |SourceType = DBF;
           |Data Source=" + КаталогИБ() + ";
           |Mode=ReadWrite;
           |Extended Properties="""";
           |User ID="""";
           |Password="""";
           |Mask Password=False;
           |Collating Sequence=MACHINE;
           |DSN=""""";      

           Рез = База.Соединение(Соединение);
           Запрос = База.СоздатьКоманду();
      
           стрЭтапы="";
           для фф=1 по спФильтрЭтапы.РазмерСписка() цикл
                 Если фф=1 тогда
                       значение1=спФильтрЭтапы.получитьЗначение(фф);
                       стрЭтапы=стрЭтапы+",:значение1";
                       Запрос.УстановитьТекстовыйПараметр("значение1", значение1);
                 ИначеЕсли фф=2 тогда
                       значение2=спФильтрЭтапы.получитьЗначение(фф);
                       стрЭтапы=стрЭтапы+",:значение2";
                       Запрос.УстановитьТекстовыйПараметр("значение2", значение2);
                 ИначеЕсли фф=3 тогда
                       значение3=спФильтрЭтапы.получитьЗначение(фф);
                       стрЭтапы=стрЭтапы+",:значение3";
                       Запрос.УстановитьТекстовыйПараметр("значение3", значение3);
                 ИначеЕсли фф=4 тогда
                       значение4=спФильтрЭтапы.получитьЗначение(фф);
                       стрЭтапы=стрЭтапы+",:значение4~";
                       Запрос.УстановитьТекстовыйПараметр("значение4", значение4);
                 КонецЕсли;
                 
           КонецЦикла;
           
           стрЭтапы=прав(стрЭтапы,стрДлина(стрЭтапы)-1);
           
           ВыбДата=ТекущаяДата();
           
           ТекстЗапроса="
           |SELECT
           |      Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
           |      Рег.Ном as [Ном $Число],
           |      Рег.Этап as [Этап $Перечисление.Этапы],
           |   Рег.ДокументДвижения as [ДокументДвижения $Документ.МесячныйПлан],
           |      Рег.План as [План $Документ.ФормированиеЗаказа1],
           |      SUM(Рег.КоличествоОстаток) as Количество
           |FROM
           |      (SELECT
           |            $Р.Ном as Ном,
           |            $Р.Этап as Этап,
           |            $Р.Продукция as Номенклатура,
           |            $Р.ДокументДвижения AS ДокументДвижения,
           |            $Р.План as План,
           |            $Р.Количество AS КоличествоОстаток
           |      FROM
           |            $РегистрИтоги.ДвижениеПродукции as Р
           |      WHERE
           |            (period = :ПредМесяц~~)
           |            AND ($Р.Количество>0)
           |
           |      UNION ALL
           |
           |      SELECT
           |            $Р.Ном as Ном,
           |            $Р.Этап as Этап,
           |            $Р.Продукция as Номенклатура,
           |            $Р.ДокументДвижения AS ДокументДвижения,
           |            $Р.План as План,
           |            $Р.Количество * (1 - Р.debkred * 2) AS КоличествоОстаток
           |      FROM
           |            $Регистр.ДвижениеПродукции AS Р
           |      INNER JOIN
           |            1sjourn jr ON Р.iddoc = jr.iddoc
           |                  AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~)
           |                  AND ($ФлагРегистра.ДвижениеПродукции = 1)
           |      ) Рег
           |WHERE
           |      (Рег.План=:Заказ~)
           |    AND      (Рег.Этап IN ("+стрЭтапы+"))";
           |GROUP BY
           |      Рег.Номенклатура";
           
           
           Запрос. УстановитьТекстовыйПараметр ("НачалоМесяца", НачМесяца(ВыбДата));
           Запрос. УстановитьТекстовыйПараметр ("ПредДата", ВыбДата-1);
           Запрос. УстановитьТекстовыйПараметр ("ПредМесяц", НачМесяца(ДобавитьМесяц(ВыбДата,-1)));
           Запрос. УстановитьТекстовыйПараметр ("Заказ", Заказ);
           Запрос.Отладка(1);
           
           ТзДокументов=Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
           ТзДокументов.Загрузить(ТзДокументов);



выдает в отладку:

     Рег.Этап as [Этап_1c_type_Перечисление_Этапы],
   Рег.ДокументДвижения as [ДокументДвижения_1c_type_Документ_МесячныйПлан],
     Рег.План as [План_1c_type_Документ_ФормированиеЗаказа1],
     SUM(Рег.КоличествоОстаток) as Количество
FROM
     (SELECT
           Р.sp27244 as Ном,
           Р.sp26448 as Этап,
           Р.sp26447 as Номенклатура,
           Р.sp26459 AS ДокументДвижения,
           Р.sp26449 as План,
           Р.sp26451 AS КоличествоОстаток
     FROM
           rg26452 as Р
     WHERE
           (period = {d '2008-09-01'})
           AND (Р.sp26451>0)

     UNION ALL

     SELECT
           Р.sp27244 as Ном,
           Р.sp26448 as Этап,
           Р.sp26447 as Номенклатура,
           Р.sp26459 AS ДокументДвижения,
           Р.sp26449 as План,
           Р.sp26451 * (1 - Р.debkred * 2) AS КоличествоОстаток
     FROM
           ra26452 AS Р
     INNER JOIN
           1sjourn jr ON Р.iddoc = jr.iddoc
                 AND (jr.date BETWEEN {d '2008-10-01'} AND {d '2008-10-06'})
                 AND (rf26452 = 1)
     ) Рег
WHERE
     (Рег.План=' KXK  5X33   ')
    AND      (Рег.Этап IN ('   L08   ','   L2L   ','   L06   ',' KEM   L07   '))

пишет ошибку:

ТзДокументов=Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\LIBR\ОБРАБОТКИ\МОИ\ПЛАНИРОВАНИЕ\НАВИГАТОРНОВЫЙ.ERT(1232)}: FAILED! ICommandText::Execute(): SQL: GROUP BY clause is missing or invalid.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: GROUP BY clause is missing or invalid
Ответ #1 - 07. Октября 2008 :: 13:12
Печать  
В предложении Group By должны быть перечислены все поля, кроме тех для которых указаны функции агрегирования: Max, Min, SUM, AVG...
то есть твою строку надо написать как
Код
Выбрать все
     |GROUP BY
	     |	Рег.Номенклатура, Рег.Ном, Рег.Этап, Рег.ДокументДвижения, Рег.План"; 

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


I Love YaBB 2!

Сообщений: 130
Зарегистрирован: 12. Декабря 2007
Re: GROUP BY clause is missing or invalid
Ответ #2 - 07. Октября 2008 :: 13:33
Печать  
leshik писал(а) 07. Октября 2008 :: 13:12:
В предложении Group By должны быть перечислены все поля, кроме тех для которых указаны функции агрегирования: Max, Min, SUM, AVG...
то есть твою строку надо написать как
Код
Выбрать все
     |GROUP BY
	     |	Рег.Номенклатура, Рег.Ном, Рег.Этап, Рег.ДокументДвижения, Рег.План"; 



спасибо помогло  Улыбка
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: GROUP BY clause is missing or invalid
Ответ #3 - 08. Октября 2008 :: 10:37
Печать  
Вообще-то - просто невнимательность:

OnCheck писал(а) 07. Октября 2008 :: 13:04:
           |WHERE
           |      (Рег.План=:Заказ~)
           |    AND      (Рег.Этап IN ("+стрЭтапы+"))";
           |GROUP BY
           |      Рег.Номенклатура";
           

  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: GROUP BY clause is missing or invalid
Ответ #4 - 08. Октября 2008 :: 10:45
Печать  
pavel_tr писал(а) 08. Октября 2008 :: 10:37:
Вообще-то - просто невнимательность:

OnCheck писал(а) 07. Октября 2008 :: 13:04:
           |WHERE
           |      (Рег.План=:Заказ~)
           |    AND      (Рег.Этап IN ("+стрЭтапы+"))";
           |GROUP BY
           |      Рег.Номенклатура";
           


твой код некорректен и в нем не ошибка по-невнимательности (которую ты указал), а именно ошибка в синтаксисе инструкций T-SQL
  
Наверх
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: GROUP BY clause is missing or invalid
Ответ #5 - 09. Октября 2008 :: 07:30
Печать  
В первом посте - то, что Отладка(1) выдаёт - там же части GROUP BY нет вообще! Поэтому и ошибка в том, что текст запроса её не включает. Хотя ошибки T-SQL я не отрицаю
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать