Текущий архив: 2007.02.11;
Скачать: CL | DM;
ВнизЗамысловатый SQL-запрос Найти похожие ветки
← →
RomanH © (2006-11-21 11:36) [0]Мастера помогите составить запрос.Таблица такова
DateV CodeV In_count Curs
21.11.2006 840 1 26.640
21.11.2006 978 1 39.190
21.11.2006 826 1 50.489
21.11.2006 392 100 26.601
22.11.2006 840 1 26.640
22.11.2006 978 1 39.190
22.11.2006 826 1 50.489
22.11.2006 392 100 26.601
Нужен запрос который формировал бы
22.11.2006 26.640, 39.190, 50.489, 26.640
22.11.2006 26.640, 39.190, 50.489, 26.640
У меня просто ни каких вариантов не имеется для решения
этой задачи.Помогите.
← →
RomanH © (2006-11-21 11:38) [1]Ой результат должен быть таков
21.11.2006 26.640, 39.190, 50.489, 26.640
22.11.2006 26.640, 39.190, 50.489, 26.640
Извените что так задаю вопрос, подругому ни как не объяснить
← →
Sergey13 © (2006-11-21 11:42) [2]А CodeV только такие могут быть? Или этот набор значений число непостоянное?
Если жестко 4 начения на дату, то каждое поле можно получать отдельным подзапросом. типа
select dateV, (select curs from ... where CodeV=840),(select curs from ... where CodeV=978)...
только производительность будет сам понимаешь.
Если это в отчете только надо, то это можно (вроде) сделать через крос-таб отчет.
← →
RomanH © (2006-11-21 11:49) [3]В том то и дело что список СodeV может принимать неопределенное значение. Т.е пользователь выбирает CodeV.
А можно передавать в ХП массив типа integer;
← →
PEAKTOP © (2006-11-21 15:28) [4]
EXECUTE BLOCK
RETRUNS (
REC_DATE TIMESTAMP,
CURS_1 NUMERIC(15,3),
CURS_2 NUMERIC(15,3),
CURS_3 NUMERIC(15,3),
CURS_4 NUMERIC(15,3)
)
AS
BEGIN
FOR
SELECT DISTINCT T.DATEV FROM YOUR_TABLE Y INTO :REC_DATE
DO
BEGIN
SELECT FIRST 1 T.CURS FROM YOUR_TABLE T WHERE (T.CODEV = "840")AND(T.DATEV = :REC_DATE) INTO :CURS1;
SELECT FIRST 1 T.CURS FROM YOUR_TABLE T WHERE (T.CODEV = "978")AND(T.DATEV = :REC_DATE) INTO :CURS2;
SELECT FIRST 1 T.CURS FROM YOUR_TABLE T WHERE (T.CODEV = "826")AND(T.DATEV = :REC_DATE) INTO :CURS3;
SELECT FIRST 1 T.CURS FROM YOUR_TABLE T WHERE (T.CODEV = "392")AND(T.DATEV = :REC_DATE) INTO :CURS4;
SUSPEND;
END
END
Я бы запрос формировал программно по справочнику валют (той таблице, на которую ссылается CodeV). На IBX сразу можешь забить, не позволит она такого. Попробуй FIBPlus.
← →
RomanH © (2006-11-21 18:40) [5]Задача решена.
Правильно аль нет судите сами.
Для каждой валюты свой IBQuery.
Например при выборе 840 и 978 открываются только они, остальные переоткрываются но только код валюты я указываю "левый".
Все таки SQL не развился как следует в некоторых направлениях.
← →
saxon (2006-11-21 18:57) [6]
> RomanH © (21.11.06 18:40) [5]
Так а кто его знает правильно или нет.
Мы то не знаем на кой все это надо. Может у Вас в программе с логикой не все в порядке и как следствие - > SQL не развился как следует в некоторых направлениях.
← →
Kolan © (2006-11-21 19:02) [7]Сделай хранимую процедуру. Была похожая задача.
http://delphimaster.net/view/3-1163160336/
В итоге сделал. А ели делать на клиенте, то в каждого клиента код копировать...
← →
Kolan © (2006-11-21 19:13) [8]Да если будешь смотреть топик, я свою сделал процедуру(ры), а не воспользовался предложеной
← →
Anatoly Podgoretsky © (2006-11-21 22:18) [9]> RomanH (21.11.2006 18:40:05) [5]
А в каком направление он должен был развиться?
← →
YurkaT © (2006-11-22 21:58) [10]select * from таблица where CodeV=840 and CodeV=978 (если кому выбор надо) order by DateV....
а потом по строчно распихуеш так, как тебе угодно, в stringgrid(так для удобсва))
← →
Кщд © (2006-11-23 15:44) [11]
> select * from таблица where CodeV=840 and CodeV=978
пустой рекордсет можно и не "распихуить" ))
Страницы: 1 вся ветка
Текущий архив: 2007.02.11;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.043 c