powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / В запросе убираю group by - и начинает ругаться :-(
25 сообщений из 28, страница 1 из 2
В запросе убираю group by - и начинает ругаться :-(
    #32577305
Фотография Ihor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите, пожалуйста, новичку:
Надо получить след. данные (количество записей):
SINTRANC=<name>, и диапазон STEL_A ( 4732, 4733 ... и т. д. до 4738)
и
SINTRANC=<name>, и диапазон STEL_A ( 47392, 47393 ... и т. д. до 47397)
т. е.,значения SINTRANC=<name> одинаковые, а диапазон STEL_A разный.
Выполняю запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
   IBQuery1.SQL.Add('Select '+t+', Count(NDURATION) as nall From AMA');
   IBQuery1.SQL.Add(' Where (SSOURCE=1)');
   IBQuery1.SQL.Add(' and (dbegdate between :date and :date1) ');
   IBQuery1.ParamByName('date').asstring:=ds1;
   IBQuery1.ParamByName('date1').asstring:=ds2;
   IBQuery1.SQL.Add(' AND (');
   ...
      IBQuery1.SQL.Add(' OR ');
   ...
   IBQuery1.SQL.Add('  ( SINTRANC=:sint ');
   IBQuery1.ParamByName('sint').asstring:=trg;
   ...
     IBQuery1.SQL.Add('AND (');
     for k:=fd to ld do
      if k<ld then
       begin
        IBQuery1.SQL.Add(' (STEL_A Like "'+stel+IntToStr(k)+'%") OR');
        IBQuery2.SQL.Add(' (STEL_A Like "'+stel+IntToStr(k)+'%") OR');
       end
      else
       begin
        IBQuery1.SQL.Add(' (STEL_A Like "'+stel+IntToStr(k)+'%"))  )');
        IBQuery2.SQL.Add(' (STEL_A Like "'+stel+IntToStr(k)+'%"))  )');
       end;
   if (i=Memo1.Lines.Count- 1 ) then
     begin
      IBQuery1.SQL.Add(') ');
      IBQuery2.SQL.Add(') ');
     end;
     end;
  end;
IBQuery1.SQL.Add('group by '+t);
IBQuery1.Open;
- количество записей выводит, но суммирует для двух случаев, а надо, чтоб для каждого случая отдельно вывело количество записей (если задавать эти параметры отдельно, выводить правильные значения). Зкаписываю рез-т запроса в ТХТ-файл:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  Select SINTRANC, Count(NDURATION) as nall From AMA
 Where (SSOURCE= 1 )
 and (dbegdate between ? and ?) 
 AND (
  ( SINTRANC=? 
AND (
 (STEL_A Like "4737911%") OR
 (STEL_A Like "4737912%") OR
 (STEL_A Like "4737913%") OR
 (STEL_A Like "4737914%") OR
 (STEL_A Like "4737915%") OR
 (STEL_A Like "4737916%"))  )
 OR 
  ( SINTRANC=? 
AND (
 (STEL_A Like "473792%") OR
 (STEL_A Like "473793%") OR
 (STEL_A Like "473794%") OR
 (STEL_A Like "473795%"))  )
) 
group by SINTRANC
Убираю же просто IBQuery1.SQL.Add('group by '+t);
в текстовом файле пропадает просто последняя строка, но начинает ругаться:
"INVALID COLUMN REFERNCE"
В чем грабли?
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577317
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кому нужна твоя писанина не Delphi ?!
Приведи SQL-запрос в нормальном виде .
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577323
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ты монстр...
напиши просто в sql! в таком виде без поллитры не разобраться
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577333
Фотография Ihor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос:
Select SINTRANC, Count(NDURATION) as nall From AMA
Where (SSOURCE=1)
and (dbegdate between ? and ?)
AND (
( SINTRANC=?
AND (
(STEL_A Like "4737911%") OR
(STEL_A Like "4737912%") OR
(STEL_A Like "4737913%") OR
(STEL_A Like "4737914%") OR
(STEL_A Like "4737915%") OR
(STEL_A Like "4737916%")) )
OR
( SINTRANC=?
AND (
(STEL_A Like "473792%") OR
(STEL_A Like "473793%") OR
(STEL_A Like "473794%") OR
(STEL_A Like "473795%")) )
)
group by SINTRANC
віводит, вот тоьлко данніе суммирует, а надо для каждогго случая отдельно вівести рез-т, если сделать
Select SINTRANC, Count(NDURATION) as nall From AMA
Where (SSOURCE=1)
and (dbegdate between ? and ?)
AND (
( SINTRANC=?
AND (
(STEL_A Like "4737911%") OR
(STEL_A Like "4737912%") OR
(STEL_A Like "4737913%") OR
(STEL_A Like "4737914%") OR
(STEL_A Like "4737915%") OR
(STEL_A Like "4737916%")) )
OR
( SINTRANC=?
AND (
(STEL_A Like "473792%") OR
(STEL_A Like "473793%") OR
(STEL_A Like "473794%") OR
(STEL_A Like "473795%")) )
)
говорит ,что
INVALID COLUMN REFERENCE
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577337
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тупею и тупею...
НиКуя не понял я...
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577348
Фотография Ihor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Group by ведь служит, чтобы отбросить повторяющиес рез-ты для одиноковых значений, и прото суммирует этот самый результат, а надо для каждого случая отдельно получить кол-во записей
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577354
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ihorнадо для каждого случая отдельно получить кол-во записей
Переведи мне, будь другом. Не понимаю я.
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577360
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Group by не суммирует, а выполняет аггрегатную ф-цию (max, avg, count и.т.п.)
так что если тебе надо: Ihorдля каждого случая отдельно получить кол-во записей то какраз надо группировать... или я тоже ниче не понял...
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577370
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сильно подозреваю, что ты не хочешь в Delphi - отладчике посмотреть текст результирующего запроса после того, как ты "убрал" group by

Код: plaintext
IBQuery1.SQL.Add('group by '+t); 
- да?

Может, ты просто в строчке
Код: plaintext
IBQuery1.SQL.Add('Select '+t+', Count(NDURATION) as nall From AMA');

в качестве значения
Код: plaintext
t
подставлчяешь нечто, неудобобавримое для сервера?

Перед строкой
Код: plaintext
IBQuery1.Open;
добавь, к примеру,
Код: plaintext
 ShowMEssage(IBQuery1.SQL.Text);
, нажми Ctrl+C, когда появится текст запроса и покажи нам.
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577378
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, при приведении дельфевого кода можно использовать

[SRC delphi][/SRC]
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577380
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 mv:
да нет, все логично, ругается на Count() без использования группировки...
только непонятно чего автор хочет....
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577403
Фотография Ihor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBQuery1.SQL.Text:
'Select SINTRANC, Count(NDURATION) as nall From AMA'
' Where (SSOURCE=1)'
' and (dbegdate between :date and :date1) '
' AND ('
' ( SINTRANC=:sint '
'AND ('
' (STEL_A Like "4737911%") OR'
' (STEL_A Like "4737912%") OR'
' (STEL_A Like "4737913%") OR'
' (STEL_A Like "4737914%") OR'
' (STEL_A Like "4737915%") OR'
' (STEL_A Like "4737916%")) )'
' OR '
' ( SINTRANC=:sint '
'AND ('
' (STEL_A Like "473792%") OR'
' (STEL_A Like "473793%") OR'
' (STEL_A Like "473794%") OR'
' (STEL_A Like "473795%")) )'
') '
'group by SINTRANC'
SINT - одно и то же значение, вот только STEL_A два случая:
1) 4737911-4737916 и 2) 473792-473795
В таком варианте запроса оно эти результаты складывает, а надо получить результаты отдельно
На запрос
IBQuery1.SQL.Text:
'Select SINTRANC, Count(NDURATION) as nall From AMA'
' Where (SSOURCE=1)'
' and (dbegdate between :date and :date1) '
' AND ('
' ( SINTRANC=:sint '
'AND ('
' (STEL_A Like "4737911%") OR'
' (STEL_A Like "4737912%") OR'
' (STEL_A Like "4737913%") OR'
' (STEL_A Like "4737914%") OR'
' (STEL_A Like "4737915%") OR'
' (STEL_A Like "4737916%")) )'
' OR '
' ( SINTRANC=:sint '
'AND ('
' (STEL_A Like "473792%") OR'
' (STEL_A Like "473793%") OR'
' (STEL_A Like "473794%") OR'
' (STEL_A Like "473795%")) )'
') '
т. е, попросту убрал строку 'group by SINTRANC'
пишет:INVALID COLUMN REFERENCE
:-(
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577409
Фотография Ihor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zandr2 mv:
да нет, все логично, ругается на Count() без использования группировки...
только непонятно чего автор хочет....
Надо результаты получить в виде:

SINTRANC=<name>, nall=204 (дипазаон 4737911-4737916)
и
SINTRANC=<name>, nall=1029 (дипазаон 473792-473795)
, а оно эти рез-ты складывает:
SINTRANC=<name>, nall=1233
Вот в этом соль
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577438
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не понимаю... если есть таблица
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ID  NAME
 1   Иванов
 2   Иванов
 3   Петров
 4   Сидиров
 5   Иванов
 6   Петров
то

Код: plaintext
1.
2.
select Count(ID), Name from table
group by Name
вернет
3 Иванов
2 петров
1 Сидоров

в чем проблемма? кто кого складывает?
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577444
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ты сервер запросил, так он тебе и вернул.
Телепатией он не обладает.
Делай 2 подзапроса и объединяй их по UNION ALL.
И прекрати постить Дельфийский код. Он нафик никому не нужен.
Нужны только сами SQL-запросы.
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577545
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, без group тут никак.

Делай так:

Select case
when STEL_A between '4737911' and '4737916' then ''4737911-4737916'
when STEL_A between '4737917' and '4737960' then ''4737917-4737960'
else 'Прочие'
end Variants, Count(NDURATION) nall
from AMA

...
...

group by

Select case
when STEL_A between '4737911' and '4737916' then ''4737911-4737916'
when STEL_A between '4737917' and '4737960' then ''4737917-4737960'
else 'Прочие'
end

--------------------

Ура FireBird 1.5!
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577548
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини:

Ну, без group тут никак.

Делай так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Select 
  case 
    when STEL_A between '4737911' and '4737916' then ''4737911- 4737916 '
    when STEL_A between '4737917' and '4737960' then ''4737917-4737960'
    else 'Прочие'
  end Variants, 
  Count(NDURATION) nal
from AMA

...
...

group by
 case 
   when STEL_A between '4737911' and '4737916' then ''4737911- 4737916 '
   when STEL_A between '4737917' and '4737960' then ''4737917-4737960'
   else 'Прочие'
 end

--------------------
Ура FireBird 1.5!
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577904
Фотография Ihor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvИзвини:

Ну, без group тут никак.

Делай так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Select 
  case 
    when STEL_A between '4737911' and '4737916' then ''4737911- 4737916 '
    when STEL_A between '4737917' and '4737960' then ''4737917-4737960'
    else 'Прочие'
  end Variants, 
  Count(NDURATION) nal
from AMA

...
...

group by
 case 
   when STEL_A between '4737911' and '4737916' then ''4737911- 4737916 '
   when STEL_A between '4737917' and '4737960' then ''4737917-4737960'
   else 'Прочие'
 end

--------------------
Ура FireBird 1.5!

Ругается на when... и дальше не идет :-(
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577914
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точка с запятой пропущена.

Но я бы сделал через UNION ALL.
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577922
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, какой ты, прямо, не знаю какой!

Я, прежде чем тебе предложить, проверил, между прочим... Все работет.

Какой сервер? Как ругается?

Ты ОТЛАЖИВАЛ запрос перед тем, как разместить его в программе?
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577939
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Проходящему: Ничего там не пропущено.

Вот пример, только что проверил (таблица Bank, имеется поле bank_id):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select
  case
    when  b.bank_id between  1  and  5  then '1-5'
    when b.bank_id between  6  and  99  then '6-99'
    else   'Прочие'
  end variant,


 count(*) from bank b

 group by
   case
    when  b.bank_id between  1  and  5  then '1-5'
    when b.bank_id between  6  and  99  then '6-99'
    else   'Прочие'
  end
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32577985
Фотография Ihor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvНу, какой ты, прямо, не знаю какой!

Я, прежде чем тебе предложить, проверил, между прочим... Все работет.

Какой сервер? Как ругается?

Ты ОТЛАЖИВАЛ запрос перед тем, как разместить его в программе?
Отлаживал. Может, что-то напутал в синтаксисе?
(create view new_view
as
select
case
when ama.nid between 1 and 5 then '1-5'
when ama.nid between 6 and 99 then '6-99'
else 'Prochie'
end variant,


count(*) from ama

group by
case
when ama.nid between 1 and 5 then '1-5'
when ama.nid between 6 and 99 then '6-99'
else 'Prochie'
end
)

Сервер FireBird 1.0,
ругается
Token unknown - line X, char Y.
when.
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32578003
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У FireBird 1.0 нет CASE
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32578007
vis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к сожалению, 1.0 не умеет case :(
...
Рейтинг: 0 / 0
В запросе убираю group by - и начинает ругаться :-(
    #32578020
Фотография Ihor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
visк сожалению, 1.0 не умеет case :(
ААА!!!!!
2vis, 2Мимопроходящий, 2mv:
А где можно реализовать case? и, если можно, ссылочку, пожалуйста...
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / В запросе убираю group by - и начинает ругаться :-(
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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