![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование Group by с полями типа BLOB [FB 1.5]
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
"ОПТИМУ" Альтековскую ковыряем ?