powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Итог по части значения
25 сообщений из 30, страница 1 из 2
Итог по части значения
    #32459749
s@a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s@a
Гость
Здраствуйте господа.
Есть Interbase таблица Tab1, в ней два поля:
- Field1 VARCHAR(5);
- Field2 DOUBLE PRECISION;
Таблица имеет такие значения:
Field 1 I Field 2
21001 I 80.35
21002 I 140.12
18003 I 800.02
18005 I 30.12
18003 I 14.20
... I ...
Можно-ли написать запрос, что бы на выходе получить:

kod2 I S_sum
21 I 220.47
18 I 844.34
... I ...
...
Рейтинг: 0 / 0
Итог по части значения
    #32459754
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
SELECT SUBSTRING(TAB1.FIELD1 from  1  for  2 ), SUM(TAB1.FIELD2)
FROM TAB1
GROUP BY  1 

Firebird 1.5
...
Рейтинг: 0 / 0
Итог по части значения
    #32459823
s@a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s@a
Гость
В Interbase получается вот

Select Substr(Field1,1,2), sum(Field2)
from Tab1
group by Field1


но этот запрос выбирает:
Field 1 I Field 2
21 I 80.35
21 I 140.12
18 I 814.22
18 I 30.12

а нужно :
Field 1 I Field 2
21 I 220.47
18 I 844.34
...
Рейтинг: 0 / 0
Итог по части значения
    #32459829
Andrew Kruchinin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написали же:
Group By 1
...
Рейтинг: 0 / 0
Итог по части значения
    #32459839
s@a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s@a
Гость
В Interbase если вместо имени поля вставить № поля получаешь ошибку
Dynamic SQL Error
SQL error code = -104
Token unknown - line 3, char 8
1

Выходит в Interbase даже с подключёнными UDF нельзя в одном скрипте реализовать такую штуку :-((
...
Рейтинг: 0 / 0
Итог по части значения
    #32459850
Andrew Kruchinin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вернемся к баранам - версия сервера какая?
...
Рейтинг: 0 / 0
Итог по части значения
    #32459873
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй
GROUP BY SUBSTR(TAB1.FIELD1, 1, 2)
...
Рейтинг: 0 / 0
Итог по части значения
    #32459913
Droner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй так
Select Substr(Field1,1,2) AS Field1, sum(Field2)
from Tab1
group by Field1
...
Рейтинг: 0 / 0
Итог по части значения
    #32459930
s@a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s@a
Гость
Всё ясно, здесь такие же умники как и я, без результата но всем спасибо .
...
Рейтинг: 0 / 0
Итог по части значения
    #32460079
Andrew Kruchinin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А версию сервера так и не сказал. Ну прям шпиён какой-то...
...
Рейтинг: 0 / 0
Итог по части значения
    #32460270
s@a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s@a
Гость
Серевер Interbase 5.5.0.742
...
Рейтинг: 0 / 0
Итог по части значения
    #32460278
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не зависеть от версии сервера в построении запроса, надо
просто добавить в табл. вычисляемое (COMPUTED) поле со значением
первые 2 символа из поля Field1.
Тогда все стандартно:
SELECT FIRST2FROMFIELD1, SUM(FIELD2)
FROM TAB1
GROUP BY FIRST2FROMFIELD1
...
Рейтинг: 0 / 0
Итог по части значения
    #32460279
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё раз
...
Рейтинг: 0 / 0
Итог по части значения
    #32460287
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все же стоит попробовать как написал S.G.
Код: plaintext
1.
2.
3.
SELECT SUBSTRING(TAB1.FIELD1 from  1  for  2 ), SUM(TAB1.FIELD2)
FROM TAB1
GROUP BY SUBSTRING(TAB1.FIELD1 from  1  for  2 )

Хотя версия 5.5 уж очень старая ... может там и не работает.

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Итог по части значения
    #32460309
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Dnico

В IB5.5 не только таких группировок нет, но и сабстринг ещё не встроен...:)
...
Рейтинг: 0 / 0
Итог по части значения
    #32461639
Andrew Kruchinin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А не чревато ли использовать в COMPUTED BY полях вычисляемое через UDF значение? B/R пройдет нормально потом на 100%?
...
Рейтинг: 0 / 0
Итог по части значения
    #32461646
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переходи на Firebird 1.0. В нем можно делать GROUP BY по UDF. Проблем с переходом не будет, а работать будет все гораздо стабильнее.
...
Рейтинг: 0 / 0
Итог по части значения
    #32461802
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А не чревато ли использовать в COMPUTED BY полях вычисляемое через UDF
>значение? B/R пройдет нормально потом на 100%?

Чреватостей и ненормальностей замечено не было...
:)
...
Рейтинг: 0 / 0
Итог по части значения
    #32462120
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У него же IB5.5!
Еще в то время как появился IB5.6 уже говорили что надо срочно менять IB5.5 на IB5.6, потому как IB5.5 глючноватая.
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
Итог по части значения
    #32462955
s@a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s@a
Гость
Добавил в таблицу вычисляемое поле с подлючённым из UDF Substr, стало легче. Но мысль о переходе на Firebird 1.5 закралась в душу- слишком тоскливо
на Interbase.
...
Рейтинг: 0 / 0
Итог по части значения
    #32462965
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай, переходи на Firebird - там гораздо веселей
...
Рейтинг: 0 / 0
Итог по части значения
    #32463112
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На Firebird 1.5 не спеши переходить. Там глюк есть не приятный в оптимизаторе. 1.0 юзай. Но и он, конечно, не без греха.
...
Рейтинг: 0 / 0
Итог по части значения
    #32463140
Andrew Kruchinin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И какой же это глюк там есть? Не просвятишь для интереса чтобы на грабли не наступил просто.
...
Рейтинг: 0 / 0
Итог по части значения
    #32463509
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAV , а ты про какую версию FB 1.5 говоришь ?
Их вообще-то было 10 штук. (9 кандидатов)

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Итог по части значения
    #32463795
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пробовал на RC9 и на final release. Платформа RedHat 9.0. Глюк такой:

Ошибка проявляется при использовании объединений таблиц и хранимых процедур.

Имеются 2 таблицы
CREATE TABLE TABLE1 (
FIELD1 INTEGER);

CREATE TABLE TABLE2 (
FIELD2 INTEGER);

На базе второй таблицы создана ХП:

CREATE PROCEDURE P_TABLE2
RETURNS (
FIELD2 INTEGER)
AS
BEGIN
FOR
SELECT FIELD2 FROM TABLE2 INTO :FIELD2
DO BEGIN
SUSPEND;
END
END
Если выполнить запрос типа:

SELECT * FROM TABLE1 T INNER JOIN P_TABLE2 PT ON T.FIELD1=PT.FIELD2

в Firebird 1.0 выполняется MERGE объединение, т.е. план запроса такой:
PLAN MERGE (SORT (T NATURAL),SORT (TABLE2 NATURAL))
и запрос выполняется весьма быстро.

В Firebird 1.5 ситуация другая. План запроса он выдает такой:

PLAN JOIN (TABLE2 NATURAL,T NATURAL)

Однако чтобы выполнить запрос по такому плану за приемлемое время при большом кол. записей необходим индекс (и то он не дает желаемого эффекта). Поэтому запрос выполняется ужасно долго.

Я писал об этом разработчикам и они ответили, что в курсе этой проблемы и работают над ее решением.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Итог по части значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]