powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на выод записей.
25 сообщений из 118, страница 1 из 5
Запрос на выод записей.
    #38091478
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем пытаюсь сделать запрос на выборку по определенному ид, например
Все табл соединены, вот просто выборка на вывод всех записей, надо выводит записи у которых например
sale.KOD_SOTR=1

авторselect sale.DATA, sale.ETAP,sale.KOD_SOTR,sotr.FIO_SOTR, sale.ID_SALE, sale.KOD_CLIENT, sale.PROD, sale.PROD2, sale.SUMM, sale.VIDPROD, sale.VIDPROD2,client.fio,OFFICE.NAME_OFF
from sale,client,sotr,OFFICE
where sale.KOD_CLIENT=client.ID_CLIENT and sale.KOD_SOTR=sotr.ID_SOTR and sotr.KOD_OFF=OFFICE.ID_OFF


Как сформировать правильно запрос?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091486
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
and sale.KOD_SOTR=1
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091505
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tactical Nuclear Penguin,

гдето у меня ошибка но не могу найти.

авторconst
saleSelectSQLText=
'select sale.DATA, sale.ETAP,sale.KOD_SOTR,sotr.FIO_SOTR, sale.ID_SALE, sale.KOD_CLIENT, sale.PROD, sale.PROD2, sale.SUMM,'+
'sale.VIDPROD, sale.VIDPROD2,client.fio,OFFICE.NAME_OFF from sale,client,sotr,OFFICE'+
'where sale.KOD_CLIENT=client.ID_CLIENT and sale.KOD_SOTR=sotr.ID_SOTR and sotr.KOD_OFF=OFFICE.ID_OFF ';


{'select sale.DATA, sale.ETAP,sale.KOD_SOTR,sotr.FIO_SOTR, sale.ID_SALE, sale.KOD_CLIENT,'+
'sale.PROD, sale.PROD2, sale.SUMM, sale.VIDPROD, sale.VIDPROD2,client.fio,OFFICE.NAME_OFF'+
'from sale,client,sotr,OFFICE'+
'where sale.KOD_CLIENT=client.ID_CLIENT and sale.KOD_SOTR=sotr.ID_SOTR and sotr.KOD_OFF=OFFICE.ID_OFF';
}
var
saleOrderbyFieldName: string = '';

function Tform2.saleSQL(SortField: string): string;
begin
Result := saleSelectSQLText;
if prava=0 then
Result := Result + ' and sale.KOD_SOTR=1'; //+ IntTostr(cursotrid);
if saleOrderbyFieldName = '' then
begin
Result := Result + ' order by ' + SortField;
saleOrderbyFieldName := SortField; //запомним текущее состяние сортировки
end else
if Pos('desc', saleOrderbyFieldName)=0 then
begin
Result := Result + ' order by ' + SortField + ' desc';
saleOrderbyFieldName := SortField + ' desc';
end else
saleOrderbyFieldName := '';
end;

Если в ib апрос делать то все выводиться нормально.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091579
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aydar1992гдето у меня ошибка но не могу найти.
ошибка? какая-такая ошибка?

aydar1992Если в ib апрос делать то все выводиться нормально.
значит у тебя при склеивании запроса в программе получается кривой запрос. Читай сообщение об ошибке внимательно.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091584
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

sql error code=-104
token unknown - line 1, column 216
'.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091621
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aydar1992,

то есть, ты перед выполнением запроса в программе не можешь в отладчике посмотреть, что получилось в результате склеивания?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091645
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aydar1992,

найди место, где делаешь открытие датасета/квери и через ShowMessage() выведи то, что склеил в текст запроса. Обычно потерянные разделители или кавычки очень хорошо видно. Не разберешься - давай сюда звпрос. Но только не надо постить дельфовый код - это никому не интересно как ты склеиваешь , важно что ты получаешь .
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091662
Фотография peter64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 автор
'select sale.DATA, sale.ETAP,sale.KOD_SOTR,sotr.FIO_SOTR, sale.ID_SALE, sale.KOD_CLIENT, sale.PROD, sale.PROD2, sale.SUMM, '+
'sale.VIDPROD, sale.VIDPROD2,client.fio,OFFICE.NAME_OFF from sale,client,sotr,OFFICE '+
перед закривающей кавычкой поставь пробел
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091759
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arni,

вот что склеил

авторselect sale.DATA, sale.ETAP,sale.KOD_SOTR,sotr.FIO_SOTR, sale.ID_SALE, sale.KOD_CLIENT, sale.PROD, sale.PROD2, sale.SUMM,sale.VIDPROD, sale.VIDPROD2,client.fio,OFFICE.NAME_OFF from sale,client,sotr,OFFICE where sale.KOD_CLIENT=client.ID_CLIENT and sale.KOD_SOTR=sotr.ID_SOTR and sotr.KOD_OFF=OFFICE.ID_OFF and sale.KOD_SOTR=1 order by
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091765
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибка здесь
Код: sql
1.
order by 
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091768
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arni,

лишние order by, но он нужно при сортировки. например
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091776
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aydar1992,

ты скомандовал "отсортируй", но не сказал по какому полю. Чтобы ты сделал на месте сервера, если увидел такую незаконченную команду?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091829
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arni,

arni,
наконецто сделал, if SortField='' then Exit; забыл в склейки
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100277
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, помогите, пожалуйста! Совершенно не знаю как сделать следующее в запросе. В таблице столбец формата timestamp... Нужно в запросе отобрать записи только по году.. Как преобразовать timestamp в год??? Желательно в формате четырёх цифр = "2012"

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select 
    equipmentpars.equipmentid,
    equipmentlist.shifr,
    equipmentlist.naim,
    equipmentlist.oboz,
    equipmentpars.equipmentpardatetime
from equipmentpars
   left outer join equipment on (equipmentpars.equipmentid = equipment.id)
   left outer join equipmentlist on (equipment.equipmentlistid = equipmentlist.id)
   left outer join equipmentparslist on (equipmentpars.equipmentparslistid = equipmentparslist.id)
where 
   (
      (equipmentpars.equipmentpardatetime = 2012)
   )
order by equipmentlist.shifr, equipmentlist.naim, equipmentlist.oboz
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100287
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexКак преобразовать timestamp в год???
RTFM EXTRACT()
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100288
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EXTRACT(YEAR FROM Дата)
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100289
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
случайно наткнулся в просторах интернета не решение
Код: sql
1.
2.
3.
4.
where 
   (
      (extract(year from equipmentpars.equipmentpardatetime)=2013)
   )
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100311
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На фотофинише DS обошел всех. Опыт не пропьешь даже «в ночь с 31 на 11»
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100473
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо! всем спасибо, сразу не увидел!
вот ещё вопросик. почему-то при попытке использовать GROUP BY выдаёт ошибку: not contained in either an aggregate function or the GROUP BY... дело в том, что может быть много записей номера изделия, но с разными датами (вдруг номер изменили после переконсервации через несколько лет). и это у каждого выпускаемого оборудования! получается
Оборудование Номер Дата
1 1 12.12.2012
1 2 13.01.2013
2 1 12.12.2012
3 1 12.12.2012

А нужно в результате выполнения запроса с группировать по идентификатору оборудования, при этом выбрать номер по самой последней дате для данного оборудования, то есть нужно получить:

Оборудование Номер Дата
1 2 13.01.2013
2 1 12.12.2012
3 1 12.12.2012

То есть мы получили список выпущенного оборудования с актуальными номерами. В коде ниже я уже отфильтровываю по конкретному идентификатору одно оборудование...
Код: sql
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.
BEGIN
  FOR
    select
        equipmentpars.equipmentid,
        equipmentlist.shifr,
        equipmentlist.naim,
        equipmentlist.oboz,
        equipmentparslist.equipmentpar,
        equipmentpars.equipmentparvalue,
        maxvalue(equipmentpars.equipmentpardatetime)
    from equipmentparslist
       right outer join equipmentpars on (equipmentparslist.id = equipmentpars.equipmentparslistid)
       left outer join equipment on (equipmentpars.equipmentid = equipment.id)
       left outer join equipmentlist on (equipment.equipmentlistid = equipmentlist.id)
    where
       (
          (equipmentpars.equipmentid = :IN_EQUIPMENTID )
       )
    group by equipmentpars.equipmentid
    INTO :EQUIPMENTID,
         :SHIFR,
         :NAIM,
         :OBOZ,
         :EQUIPMENTPAR,
         :EQUIPMENTPARVALUE,
         :BIRTHYEAR
  DO
  BEGIN
    SUSPEND;
  END
END



И вот отказывается GROUP BY работать, не пойму в чём дело...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100508
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В GROUP BY должны входить все поля из SELECT у которых нет агрегирующих функций, т.е.
GROUP BY 1, 2, 3, 4, 5, 6
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100523
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не может сгруппировать - значение параметра "номер изделия" (equipmentpars.equipmentparvalue) для одного и того же изделия может отличаться!!!!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100525
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexзначение параметра "номер изделия" (equipmentpars.equipmentparvalue)
для одного и того же изделия может отличаться!!!!
Ну так тут уж реши какой именно из 100500 "номеров изделия" ты хочешь для данного изделия
видеть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100526
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот схема данных и результат запроса...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100528
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу тот, который от последней даты... Второй в картинке выше
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100533
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexХочу тот, который от последней даты..

Тогда тебе надо переходить на тройку с её агрегатными фнкциями. Или полностью переделывать
запрос.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 118, страница 1 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на выод записей.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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