Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы Group By, Подзабыл слегка... 
:(
    Опции темы
fess
Дата 28.6.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

Репутация: 1
Всего: 3



Имеется следующий запрос:
Код

Select
  Sum([Информация_с_промысла].[Результат]),
  [Район].[Название_района],
  [Выгрузка].[Комментарий],
  [Страна].[Название]
  <ещё куча полей>
From <не важно>
Where <тоже не принципиально>
Group by   
  [Район].[Название_района],
  [Выгрузка].[Комментарий],
  [Страна].[Название]
  <ещё куча полей>

Где тип поля [Выгрузка].[Комментарий] -  ntext, запрос выдаёт ошибку, что нельзя группировать по этому полю, если его убираю из группировки, то тоже ругается: is invalid in the select list becouse it is not contained in either an aggregate function or the grop by.
Вопрос: Как мне изменить запрос, чтобы можно было выбрать и сумму по полю [Информация_с_промысла].[Результат] и комментарий (ну и другие поля)? 
По полю с комментарием группировка, естественно, не нужна... 

Это сообщение отредактировал(а) fess - 28.6.2006, 14:31
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
skyboy
Дата 28.6.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 2
Всего: 260



fess, смотри: группировка позволяет рассчитать среднее, минимальное, максимальное и прочие значения в пределах группы. Ты же хочешь сгруппировать, потом посчитать сумму, и выдать комментарий. Если у тебя в группе окажется 5 записей, то ты просуммируешь 5 значений, так? И выдашь эту одну сумму для группы. А как ты собираешь выдать 5 комментариев в одном поле? Как ты вообще себе это представляешь? Если сильно надо выдать комментарии  для всех записей внутри группы в одном значений, то, не знаю, как в MSSQL, а в MySQL есть функция GROUP_CONCAT. Может, и здесь такое же есть? 
PM MAIL   Вверх
fess
Дата 28.6.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

Репутация: 1
Всего: 3



Там всё нормально в этом плане... так как эти поля находятся в разных таблицах... просто они(таблицы) связаны по первичному-вторичному ключам... Весь запрос - большой - я не выкладываю его.... 
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
skyboy
Дата 28.6.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 2
Всего: 260



СУБД отбирает записи по условию WHERE. Полученные строки группируются и внутри каждой группы вычисляется сумма. Не видеть тебе и группировку и не-группировку в пределах одного запроса. Разве что в FROM-секции сделать вложенный SELECT, который вернёт значения сумм.  
PM MAIL   Вверх
bas
Дата 28.6.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: 1
Всего: 2



Цитата(fess @  28.6.2006,  14:30 Найти цитируемый пост)
[Выгрузка].[Комментарий] 

Убери из select'a это поле и группировку по нему не производи.
На значение Sum([Информация_с_промысла].[Результат]) это не влияет, кажеться. 
PM MAIL   Вверх
fess
Дата 28.6.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

Репутация: 1
Всего: 3



Цитата(bas @  28.6.2006,  14:53 Найти цитируемый пост)
На значение Sum([Информация_с_промысла].[Результат]) это не влияет, кажеться.  


Естественно, не влияет... но мне надо, чтобы запрос возвращал и это поле...

Добавлено @ 14:59 
Цитата(skyboy @  28.6.2006,  14:51 Найти цитируемый пост)
СУБД отбирает записи по условию WHERE. Полученные строки группируются и внутри каждой группы вычисляется сумма. Не видеть тебе и группировку и не-группировку в пределах одного запроса. 

Не спорю, но, в результирующей талице (после всяких объединений и т.п.) поле "Комментарий",  будет ОДИНАКОВО для всех полей [Информация_с_промысла].[Результат], по которым и делается сумма

Цитата(skyboy @  28.6.2006,  14:51 Найти цитируемый пост)
Разве что в FROM-секции сделать вложенный SELECT, который вернёт значения сумм.   

Можно поподробнее?  

Это сообщение отредактировал(а) fess - 28.6.2006, 14:59
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
skyboy
Дата 28.6.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 2
Всего: 260



Цитата(fess @  28.6.2006,  14:56 Найти цитируемый пост)
Можно поподробнее?  

без знания структуры твоих таблиц и условий отбора, подробнее - просто некуда smile
Ну, если есть, например,  2 таблиц. В одной table-  id и name, в другой table1 - id и value и надо просуммировать value для каждого id, то так
Код

SELECT t.id,t.name,summed_table.summa 
FROM table as t,
    (SELECT id,sum(value) as summa FROM table1 GROUP BY id) as summed_table 
WHERE t.id=summed_table.id

должно, как мне кажется, работать...   

Это сообщение отредактировал(а) skyboy - 28.6.2006, 15:16
PM MAIL   Вверх
Vit
Дата 28.6.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Групировать по полям типов text, ntext, image нельзя 


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
fess
Дата 28.6.2006, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

Репутация: 1
Всего: 3



Ага... мысль понятна... но не получается применить....

Просто использую внешнее объединение... не могу понять, как это применить... весь запрос:
Код

select
  [Район].[Название_района],

  [Выгрузка].[С_Ш],
  [Выгрузка].[Вост_Долг],
  [Выгрузка].[Долгота],
  [Выгрузка].[Дата],
  [Выгрузка].[С_С_Предварительно],
  [Выгрузка].[С_С_Подал],
  [Выгрузка].[С_П_Предварительно],
  [Выгрузка].[С_П_Подал],
  [Выгрузка].[Коментармй],
  [Выгрузка].[Номер],
  [Выгрузка].[Номер_С_С_Пред],
  [Выгрузка].[Номер_С_П_Пред],
  [Выгрузка].[Номер_С_П_Под],

  [Суда].[Позывной],
  [Суда].[Бортовой_Номер],
  [Суда].[Название],

  [o].[Позывной],
  [o].[Бортовой_Номер],
  [o].[Название],

  [Место_Выгрузки].[Порт],

  [Страна].[Название],

  Sum([Информация_с_промысла].[Результат]),
  [Информация_с_промысла].[Краб_шт],

  [Рыба].[ВидРыбы]



from

 {В общем, нужно делать группировку по [Рыба].Id и по [Выгрузка].Id по другим - необязательно}
  [Выгрузка] LEFT OUTER JOIN [Район] ON  [Выгрузка].[Id_Район]=[Район].Id
  LEFT OUTER JOIN [Суда] ON [Суда].[Id]=[Выгрузка].[Id_Судно_Сдатчик]
  LEFT OUTER JOIN [Суда] as o ON o.[Id]=[Выгрузка].[Id_Судно_Приёмщик]
  LEFT OUTER JOIN [Место_Выгрузки] ON [Выгрузка].[Id_Место]=[Место_Выгрузки].Id
  LEFT OUTER JOIN [Страна] ON  [Место_Выгрузки].[Id_Страна]=[Страна].Id
  LEFT OUTER JOIN [Информация_с_промысла]  on  [Информация_с_промысла].[Id_Выгрузка]= [Выгрузка].Id
  LEFT OUTER JOIN [Коэффициенты]  on   [Информация_с_промысла].[Id_Коэффициенты]=[Коэффициенты].Id
  LEFT OUTER JOIN [Рыба]  on [Коэффициенты].Id_Рыба=[Рыба].Id
where

  [Выгрузка].[Id_Судно_Сдатчик]=438
 {тут условие просто для примера... подставляются/заменяются дополниетольные во время выполнения программы}

 group by [Выгрузка].[Дата],[Выгрузка].Id, [Район].[Название_района], [Выгрузка].[С_Ш],
          [Выгрузка].[Вост_Долг],  [Выгрузка].[Долгота] ,[Выгрузка].[С_С_Предварительно],
          [Выгрузка].[С_С_Подал],  [Выгрузка].[С_П_Предварительно] , [Выгрузка].[С_П_Подал],
          [Выгрузка].[Коментармй] {тут всё и стопариться....}

Order by   [Выгрузка].[Дата],[Выгрузка].Id



Если не трудно, то подскажи...  

Это сообщение отредактировал(а) fess - 28.6.2006, 15:27
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0833 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.