Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование Group by с полями типа BLOB [FB 1.5]


Страницы:   1 2

Leshiy ©   (2006-11-14 15:59:00) 

Здравствуйте.
Есть запрос:
Select
 O.OrdNo,
 O.Ord_Comment,
 sum ( W.wn_amount ) WCount
from
 Orders O
 left join Windows W on (W.OrderID=O.OrderID)
where
 O.OrderID=...
Group by 1,2


Он не работает т.к. поле Ord_Comment имеет тип Blob.
Преобразовать в строку его тоже нельзя.

Вариант:
Select
 O.OrdNo,
 O.Ord_Comment,
 (select sum(w.wn_amount) from Windows W where w.Orderid=O.OrderId) WCount
from
 Orders O
where
 O.OrderID=...

не всегда удобен на более сложных запросах

Как быть?


PEAKTOP   (2006-11-15 18:05:00) [1]


> Leshiy ©   (15.11.06 14:05) [18]
>
> PEAKTOP ©   (15.11.06 13:05) [14]
> Ее самую.
>

Ты из разработчиков будешь, или прикручиваешь к ней чего ? А то есть предложения.
Давай в ICQ ?


Johnmen   (2006-11-15 15:37:00) [2]


> sniknik ©   (15.11.06 15:12) [30]
> Johnmen ©   (15.11.06 15:07) [29];о))а эта форма "не всегда
> удобна на более сложных запросах", см. [0]..


> Leshiy ©   (15.11.06 15:13) [31]
> В итоге пришли к тому с чего начали... :)


Во как! Я даже нить обсуждения потерял :)))


Leshiy   (2006-11-15 15:13:00) [3]

В итоге пришли к тому с чего начали... :)


sniknik   (2006-11-15 15:12:00) [4]

Johnmen ©   (15.11.06 15:07) [29]
;о))
а эта форма "не всегда удобна на более сложных запросах", см. [0]...


Johnmen   (2006-11-15 15:07:00) [5]


> Leshiy ©


Последний вопрос: поле OrdNo уникально?
Думаю, что да. Не может быть по жизни два заказа с одинаковым номером. Тогда sniknik ©   (15.11.06 14:50) [27] +

SELECT
O.OrdNo,
O.Ord_Comment,
(SELECT sum ( W.wn_amount ) WCount FROM Windows W WHERE (W.OrderID=O.OrderID))
from
Orders O
where
O.OrderID=...


Leshiy   (2006-11-15 15:04:00) [6]

sniknik ©   (15.11.06 14:50) [27]
Я не прав, дубли есть т.к. связь один ко многим.


sniknik   (2006-11-15 14:50:00) [7]

> Но в выборке повторяющихся записей нет.
зачем тогда вообще группировка? если повторений нет, то просто убери ее (а сумма то одному значению это то самое значение и будет...).
для группировки обязательны повторения в значениях группируемых полей, иначе она смысла не имеет.


Leshiy   (2006-11-15 14:41:00) [8]

Anatoly Podgoretsky ©   (15.11.06 14:35) [23]
http://www.interbase-world.com/ru/interbase/doc/detail.php?ID=2713
Замечание. Вы не можете преобразовывать данные BLOB или массив в другие типы данных, не можете преобразовывать другие типы данных в массив и BLOB. Тем не менее, индивидуальные элементы массива ведут себя как данные базового типа данных массива.
Как это понимать?


Leshiy   (2006-11-15 14:38:00) [9]

Johnmen ©   (15.11.06 14:26) [21]
Т.е. значение для всех записей одинаково???

Нет, для каждой записи из основной таблицы оно свое.
Но в выборке повторяющихся записей нет.


Anatoly Podgoretsky   (2006-11-15 14:37:00) [10]

> Johnmen  (15.11.2006 14:26:21)  [21]

Я бы тоже посоветовал заменить на "abc"


Anatoly Podgoretsky   (2006-11-15 14:35:00) [11]

> Leshiy  (15.11.2006 14:05:18)  [18]

> blob низя преобразовывать в varchar.

Спасибо, что предупредил, пойду программу переписывать.


Anatoly Podgoretsky   (2006-11-15 14:35:00) [12]

> sniknik  (15.11.2006 14:02:17)  [17]

Понял, насчет First


Johnmen   (2006-11-15 14:26:00) [13]


> Leshiy ©   (15.11.06 14:05) [18]
> Одно т.к. групп, по сути, нету.


Т.е. значение для всех записей одинаково???
И ещё: БЛОБ значение какой записи нужно?


Leshiy   (2006-11-15 14:16:00) [14]

sniknik ©   (15.11.06 14:11) [19]
Агрегатные функции тоже применять низя, никакие (благим матом ругается).


sniknik   (2006-11-15 14:11:00) [15]

> Не знает он такую функцию.
а какие знает? может "проглотит" другую, тот же Min() например?


Leshiy   (2006-11-15 14:05:00) [16]

ЮЮ ©   (15.11.06 08:55) [11]
Если хочешь могу пример привести.

Johnmen ©   (15.11.06 09:43) [12]
Одно т.к. групп, по сути, нету.

PEAKTOP ©   (15.11.06 13:05) [14]
Ее самую.

sniknik ©   (15.11.06 13:13) [15]
Не знает он такую функцию.

Anatoly Podgoretsky ©   (15.11.06 13:19) [16]
SubString не поможет, т.к. blob низя преобразовывать в varchar.


sniknik   (2006-11-15 14:02:00) [17]

> то наверно есть Substring
нет, Substring не пойдет, ему же не нужна сортировка/группировка по этому полу (как выяснилось) а нужно просто его присутствие в общем сгруппированном запросе (почемуто считает что проще указать его в группировке. и судя по тому что ожидается тот же результат то оно весде с одним OrdNo одинаково)...

видно не понятно. First не строковая функция, это агрегатная такая же как Min/Max/Avg/Sum/... только она ничего не вычисляет, просто подставляет первое значение из выбранного подмножества в сгруппированном.
есть в Access (Jet).
а то с чем можно было спутать First для строк, это Left, и у нее 2 параметра, второй длинна слева.


Anatoly Podgoretsky   (2006-11-15 13:19:00) [18]

> sniknik  (15.11.2006 13:13:15)  [15]

Если и нет, то наверно есть Substring


sniknik   (2006-11-15 13:13:00) [19]

кстати, а есть в FB

Select
 O.OrdNo,
  First(O.Ord_Comment) Ord_Comment,
 sum ( W.wn_amount ) WCount
from
 Orders O
 left join Windows W on (W.OrderID=O.OrderID)
where
 O.OrderID=...
Group by O.OrdNo


это??? или аналогичное. (думаю понятно что функция делает ;)


PEAKTOP   (2006-11-15 13:05:00) [20]

> ЮЮ ©   (15.11.06 10:13) [13]
> Оно свое на каждую запись Orders, но соединяя её с другой таблицей  Windows

"ОПТИМУ" Альтековскую ковыряем ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо