Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема SQL ругается на GROUP BY (число прочтений - 4146 )
MTM
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Местоположение: Казахстан
Зарегистрирован: 13. Октября 2006
Пол: Мужской
SQL ругается на GROUP BY
13. Октября 2006 :: 12:13
Печать  
Сразу скажу, что в SQL и в 1CPP я новичок Круглые глаза  Нерешительный
Вопрос:
Когда я пытаюсь вставить "GROUP BY" SQL ругается вот такими вот словами -

State 42000, native 8120, message [Microsoft][ODBC SQL Server Driver][SQL Server]Column 'спрИзвещения.SP467' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

сам код :

~ cut
     RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();

     RS.УстановитьТекстовыйПараметр("НачДата", НачДата);
     RS.УстановитьТекстовыйПараметр("КонДата", КонДата);
     RS.УстановитьТекстовыйПараметр("срНачСальдо",     Перечисление.СтатьиРасчета.начСальдоНаНачало);
     RS.УстановитьТекстовыйПараметр("срНачСальдоПеня", Перечисление.СтатьиРасчета.начСальдоНаНачалоПеня);

     ТекстЗапроса = "
     |SELECT
     |  $спрИзвещения.ПериодИзв     as ПериодИзв,
     |  $спрИзвещения.Организация   as [Организация $Справочник.Организации],
     |  $спрИзвещения.Объект        as [Объект $Справочник.Объекты],
     |  $спрИзвещения.СтатьяРасчета as [Статья $Перечисление.СтатьиРасчета],
     |  $спрИзвещения.Сумма         as Сумма
     |FROM
     |  $Справочник.Извещения as спрИзвещения
     |WHERE
     |  $спрИзвещения.ПериодИзв BETWEEN :НачДата AND :КонДата AND
     |  $спрИзвещения.СтатьяРасчета<>:срНачСальдо AND
     |  $спрИзвещения.СтатьяРасчета<>:срНачСальдоПеня
     |GROUP BY
     |  $спрИзвещения.Организация
     |";
   
     Если выбОрганизация.Выбран()=1 Тогда
           RS.УстановитьТекстовыйПараметр("выбОрганизация", выбОрганизация);
           ТекстЗапроса = ТекстЗапроса + "
           |AND $спрИзвещения.Организация = :выбОрганизация";
     КонецЕсли;
     Если чбПоОтдельным = 1 Тогда
           ТекстЗапроса = ТекстЗапроса + "
           |AND $спрИзвещения.Объект IN (SELECT Val FROM #СписокОбъектов)";
         RS.УложитьСписокОбъектов(спсОбъекты, "#СписокОбъектов", "Объекты");
     КонецЕсли;

     Попытка
           VT = RS.ВыполнитьИнструкцию(ТекстЗапроса);
           VT.Выгрузить(ТЗ);
     Исключение
           Сообщить(RS.ПолучитьОписаниеОшибки(),"!");
     КонецПопытки;
~ cut

И неплохо было бы если бы кто нибудь подсказал как из регистра получать "НачОст"  и "КонОст"...

Заранее благодарен!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: SQL ругается на GROUP BY
Ответ #1 - 13. Октября 2006 :: 12:16
Печать  
ругается не на group by, а на колонку спрИзвещения.SP467, т.к. она должна быть либо включена в группировку либо быть сагрегирована
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: SQL ругается на GROUP BY
Ответ #2 - 13. Октября 2006 :: 12:17
Печать  
тоже самое касается еще трех колонок
  

1&&2&&3
Наверх
 
IP записан
 
MTM
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Местоположение: Казахстан
Зарегистрирован: 13. Октября 2006
Пол: Мужской
Re: SQL ругается на GROUP BY
Ответ #3 - 14. Октября 2006 :: 04:41
Печать  
trad писал(а) 13. Октября 2006 :: 12:16:
ругается не на group by, а на колонку спрИзвещения.SP467, т.к. она должна быть либо включена в группировку либо быть сагрегирована


Уважаемый, а немогли бы Вы мне показать на моем конкретном коде, т.е. вписать недостающий код, а то чЁтА не понял...

Заранее благодарен!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: SQL ругается на GROUP BY
Ответ #4 - 14. Октября 2006 :: 04:51
Печать  
могу предложить два крайних варианта:
1
Код
Выбрать все
ТекстЗапроса = "
     |SELECT
     |  max($спрИзвещения.ПериодИзв)     as ПериодИзв,
     |  $спрИзвещения.Организация   as [Организация $Справочник.Организации],
     |  max($спрИзвещения.Объект)	  as [Объект $Справочник.Объекты],
     |  max($спрИзвещения.СтатьяРасчета) as [Статья $Перечисление.СтатьиРасчета],
     |  sum($спрИзвещения.Сумма)	   as Сумма
     |FROM
     |  $Справочник.Извещения as спрИзвещения
     |WHERE
     |  $спрИзвещения.ПериодИзв BETWEEN :НачДата AND :КонДата AND
     |  $спрИзвещения.СтатьяРасчета<>:срНачСальдо AND
     |  $спрИзвещения.СтатьяРасчета<>:срНачСальдоПеня
     |GROUP BY
     |  $спрИзвещения.Организация
     |"; 


2
Код
Выбрать все
ТекстЗапроса = "
     |SELECT
     |  $спрИзвещения.ПериодИзв     as ПериодИзв,
     |  $спрИзвещения.Организация   as [Организация $Справочник.Организации],
     |  $спрИзвещения.Объект	  as [Объект $Справочник.Объекты],
     |  $спрИзвещения.СтатьяРасчета as [Статья $Перечисление.СтатьиРасчета],
     |  sum($спрИзвещения.Сумма)	   as Сумма
     |FROM
     |  $Справочник.Извещения as спрИзвещения
     |WHERE
     |  $спрИзвещения.ПериодИзв BETWEEN :НачДата AND :КонДата AND
     |  $спрИзвещения.СтатьяРасчета<>:срНачСальдо AND
     |  $спрИзвещения.СтатьяРасчета<>:срНачСальдоПеня
     |GROUP BY
     |  $спрИзвещения.Организация, $спрИзвещения.ПериодИзв, $спрИзвещения.Объект,
     |  $спрИзвещения.СтатьяРасчета
     |"; 


К тому же есть вариации с группированием. Все зависит от задачи.
  

1&&2&&3
Наверх
 
IP записан
 
MTM
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Местоположение: Казахстан
Зарегистрирован: 13. Октября 2006
Пол: Мужской
Re: SQL ругается на GROUP BY
Ответ #5 - 14. Октября 2006 :: 05:13
Печать  
Спасибо, сработало!
Вот что у меня получилось :


     ТекстЗапроса = "
     |SELECT
     |  $спрИзвещения.ПериодИзв     as ПериодИзв,
     |  $спрИзвещения.Организация   as [Организация $Справочник.Организации],
     |  $спрИзвещения.Объект             as [Объект $Справочник.Объекты],
     |  $спрИзвещения.СтатьяРасчета as [Статья $Перечисление.СтатьиРасчета],
     |  SUM($спрИзвещения.Сумма)         as Сумма
     |FROM
     |  $Справочник.Извещения as спрИзвещения
     |WHERE
     |  $спрИзвещения.ПериодИзв BETWEEN :НачДата AND :КонДата AND
     |  $спрИзвещения.СтатьяРасчета<>:срНачСальдо AND
     |  $спрИзвещения.СтатьяРасчета<>:срНачСальдоПеня";
     
     Если выбОрганизация.Выбран()=1 Тогда
           RS.УстановитьТекстовыйПараметр("выбОрганизация", выбОрганизация);
           ТекстЗапроса = ТекстЗапроса + "
           |AND $спрИзвещения.Организация = :выбОрганизация";
     КонецЕсли;
     Если чбПоОтдельным = 1 Тогда
           ТекстЗапроса = ТекстЗапроса + "
           |AND $спрИзвещения.Объект IN (SELECT Val FROM #СписокОбъектов)";
         RS.УложитьСписокОбъектов(спсОбъекты, "#СписокОбъектов", "Объекты");
     КонецЕсли;
     
     ТекстЗапроса = ТекстЗапроса + "
     |GROUP BY
     |  $спрИзвещения.Организация, $спрИзвещения.ПериодИзв, $спрИзвещения.Объект,
     |  $спрИзвещения.СтатьяРасчета
     |";

Но, в группировке мне не нужно поле "СтатьяРасчета", если я его убираю из группировки, то SQL опять ругается  Смущённый ...
  
Наверх
 
IP записан
 
MTM
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Местоположение: Казахстан
Зарегистрирован: 13. Октября 2006
Пол: Мужской
Re: SQL ругается на GROUP BY
Ответ #6 - 14. Октября 2006 :: 05:29
Печать  
Круглые глаза Я дико извиняюсь!!! Не внимательно читал Ваш ответ вариант №1.
Спасибо!!!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать