Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / В запросе убираю group by - и начинает ругаться :-( / 25 сообщений из 28, страница 1 из 2
25.06.2004, 13:00:22
    #32577305
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Помогите, пожалуйста, новичку:
Надо получить след. данные (количество записей):
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
25.06.2004, 13:03:39
    #32577317
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Кому нужна твоя писанина не Delphi ?!
Приведи SQL-запрос в нормальном виде .
...
Рейтинг: 0 / 0
25.06.2004, 13:05:08
    #32577323
Zandr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Ну ты монстр...
напиши просто в sql! в таком виде без поллитры не разобраться
...
Рейтинг: 0 / 0
25.06.2004, 13:07:25
    #32577333
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Запрос:
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
25.06.2004, 13:09:26
    #32577337
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Я тупею и тупею...
НиКуя не понял я...
...
Рейтинг: 0 / 0
25.06.2004, 13:11:53
    #32577348
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Group by ведь служит, чтобы отбросить повторяющиес рез-ты для одиноковых значений, и прото суммирует этот самый результат, а надо для каждого случая отдельно получить кол-во записей
...
Рейтинг: 0 / 0
25.06.2004, 13:15:58
    #32577354
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Ihorнадо для каждого случая отдельно получить кол-во записей
Переведи мне, будь другом. Не понимаю я.
...
Рейтинг: 0 / 0
25.06.2004, 13:17:46
    #32577360
Zandr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Group by не суммирует, а выполняет аггрегатную ф-цию (max, avg, count и.т.п.)
так что если тебе надо: Ihorдля каждого случая отдельно получить кол-во записей то какраз надо группировать... или я тоже ниче не понял...
...
Рейтинг: 0 / 0
25.06.2004, 13:19:31
    #32577370
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Сильно подозреваю, что ты не хочешь в 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
25.06.2004, 13:22:04
    #32577378
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Коллеги, при приведении дельфевого кода можно использовать

[SRC delphi][/SRC]
...
Рейтинг: 0 / 0
25.06.2004, 13:22:20
    #32577380
Zandr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
2 mv:
да нет, все логично, ругается на Count() без использования группировки...
только непонятно чего автор хочет....
...
Рейтинг: 0 / 0
25.06.2004, 13:30:07
    #32577403
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
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
25.06.2004, 13:32:52
    #32577409
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Zandr2 mv:
да нет, все логично, ругается на Count() без использования группировки...
только непонятно чего автор хочет....
Надо результаты получить в виде:

SINTRANC=<name>, nall=204 (дипазаон 4737911-4737916)
и
SINTRANC=<name>, nall=1029 (дипазаон 473792-473795)
, а оно эти рез-ты складывает:
SINTRANC=<name>, nall=1233
Вот в этом соль
...
Рейтинг: 0 / 0
25.06.2004, 13:44:45
    #32577438
Zandr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
не понимаю... если есть таблица
Код: 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
25.06.2004, 13:45:54
    #32577444
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Как ты сервер запросил, так он тебе и вернул.
Телепатией он не обладает.
Делай 2 подзапроса и объединяй их по UNION ALL.
И прекрати постить Дельфийский код. Он нафик никому не нужен.
Нужны только сами SQL-запросы.
...
Рейтинг: 0 / 0
25.06.2004, 14:21:42
    #32577545
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Ну, без 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
25.06.2004, 14:23:08
    #32577548
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Извини:

Ну, без 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
25.06.2004, 16:26:42
    #32577904
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
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
25.06.2004, 16:29:06
    #32577914
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
Точка с запятой пропущена.

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

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

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

Ты ОТЛАЖИВАЛ запрос перед тем, как разместить его в программе?
...
Рейтинг: 0 / 0
25.06.2004, 16:34:47
    #32577939
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
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
25.06.2004, 16:46:41
    #32577985
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
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
25.06.2004, 16:50:48
    #32578003
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
У FireBird 1.0 нет CASE
...
Рейтинг: 0 / 0
25.06.2004, 16:52:21
    #32578007
vis
vis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
к сожалению, 1.0 не умеет case :(
...
Рейтинг: 0 / 0
25.06.2004, 16:55:44
    #32578020
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В запросе убираю group by - и начинает ругаться :-(
visк сожалению, 1.0 не умеет case :(
ААА!!!!!
2vis, 2Мимопроходящий, 2mv:
А где можно реализовать case? и, если можно, ссылочку, пожалуйста...
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / В запросе убираю group by - и начинает ругаться :-( / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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