Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на выод записей. / 25 сообщений из 118, страница 1 из 5
25.12.2012, 09:31:20
    #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
25.12.2012, 09:42:33
    #38091486
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
and sale.KOD_SOTR=1
...
Рейтинг: 0 / 0
25.12.2012, 10:04:26
    #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
25.12.2012, 11:10:12
    #38091579
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
aydar1992гдето у меня ошибка но не могу найти.
ошибка? какая-такая ошибка?

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

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

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

найди место, где делаешь открытие датасета/квери и через ShowMessage() выведи то, что склеил в текст запроса. Обычно потерянные разделители или кавычки очень хорошо видно. Не разберешься - давай сюда звпрос. Но только не надо постить дельфовый код - это никому не интересно как ты склеиваешь , важно что ты получаешь .
...
Рейтинг: 0 / 0
25.12.2012, 11:58:04
    #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
25.12.2012, 12:42:46
    #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
25.12.2012, 12:45:58
    #38091765
arni
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
ошибка здесь
Код: sql
1.
order by 
...
Рейтинг: 0 / 0
25.12.2012, 12:48:52
    #38091768
aydar1992
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
arni,

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

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

arni,
наконецто сделал, if SortField='' then Exit; забыл в склейки
...
Рейтинг: 0 / 0
04.01.2013, 21:08:58
    #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
04.01.2013, 21:23:45
    #38100287
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
sorockinalexКак преобразовать timestamp в год???
RTFM EXTRACT()
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.01.2013, 21:24:16
    #38100288
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
EXTRACT(YEAR FROM Дата)
...
Рейтинг: 0 / 0
04.01.2013, 21:25:58
    #38100289
sorockinalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
случайно наткнулся в просторах интернета не решение
Код: sql
1.
2.
3.
4.
where 
   (
      (extract(year from equipmentpars.equipmentpardatetime)=2013)
   )
...
Рейтинг: 0 / 0
04.01.2013, 22:16:02
    #38100311
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
На фотофинише DS обошел всех. Опыт не пропьешь даже «в ночь с 31 на 11»
...
Рейтинг: 0 / 0
05.01.2013, 12:53:17
    #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
05.01.2013, 13:53:52
    #38100508
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
В GROUP BY должны входить все поля из SELECT у которых нет агрегирующих функций, т.е.
GROUP BY 1, 2, 3, 4, 5, 6
...
Рейтинг: 0 / 0
05.01.2013, 14:27:46
    #38100523
sorockinalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
не может сгруппировать - значение параметра "номер изделия" (equipmentpars.equipmentparvalue) для одного и того же изделия может отличаться!!!!
...
Рейтинг: 0 / 0
05.01.2013, 14:30:14
    #38100525
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
sorockinalexзначение параметра "номер изделия" (equipmentpars.equipmentparvalue)
для одного и того же изделия может отличаться!!!!
Ну так тут уж реши какой именно из 100500 "номеров изделия" ты хочешь для данного изделия
видеть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.01.2013, 14:31:24
    #38100526
sorockinalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
Вот схема данных и результат запроса...
...
Рейтинг: 0 / 0
05.01.2013, 14:32:39
    #38100528
sorockinalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
Хочу тот, который от последней даты... Второй в картинке выше
...
Рейтинг: 0 / 0
05.01.2013, 14:36:58
    #38100533
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на выод записей.
sorockinalexХочу тот, который от последней даты..

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


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