powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как правильно написать такой запрос: ...
9 сообщений из 9, страница 1 из 1
Как правильно написать такой запрос: ...
    #32579121
Aleksey Kh.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСА 9.0.1.1843
Предположим есть:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create table branch.t_cl
(
    id_cl                integer                        not null default autoincrement,
    fname                char( 30 ),
    lname                char( 30 ),
    age                  integer,
    primary key (id_cl)
);

insert into t_cl(fname,lname,age)
values('Маша','Петрова', 10 );

insert into t_cl(fname,lname,age)
values('Коля','Иванов', 11 );

insert into t_cl(fname,lname,age)
values('Леша','Сидоров', 50 );


И в разных случаях надо иметь разное представление записей, т.е. например:
вид1: 'Маша Петрова',
вид2: 'Петрова, 10',
вид3: 'Петрова, Маша'

Я вот чувствую, что просмотром сделать можно, но вот как...?
Естественно, надо обойтись без if вид=... endif.

Помогите, пожалуйста :)
...
Рейтинг: 0 / 0
Как правильно написать такой запрос: ...
    #32579140
Ustazz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create view t_clDetailed
as

select
    id_cl,
    fname,
    lname,
    age,
    fname + ' ' + lname as view1,
    lname + ', ' + age as view2,
    lname + ', ' + fname as view3
from
    t_cl

А затем используешь то поле view, которое требуется в конкретной ситуации
...
Рейтинг: 0 / 0
Как правильно написать такой запрос: ...
    #32579145
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм, а кто мешает для разных случаев пользоваться разными запросами с клиента, в отчете или представлениях ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT fname || ' ' || lname AS Name
FROM branch.t_cl;

SELECT lname || ', ' || age AS Name
FROM branch.t_cl;

SELECT lname || ', ' || fname AS Name
FROM branch.t_cl;
Или я вопрос не понял ?
...
Рейтинг: 0 / 0
Как правильно написать такой запрос: ...
    #32579181
Aleksey Kh.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ustazz
Так не катит.

ASCRUS
Понятно, что в жизни все сложнее, чем Маша-Петя-Коля.
Хочется делать примерно так:
Код: plaintext
1.
2.
3.
4.
5.
select t1.*, t2.*,v_cl_name.cl_name 
from t1, t2, v_cl
where ...  
and t1.id_cl=v_cl_name.id_cl
and v_cl.id_view='вид1'
где v_cl_name и есть искомая вьюха, типа:
Код: plaintext
1.
2.
CREATE VIEW v_cl_name
AS SELECT id_view, id_cl, cl_name
...

Сейчас все сделано, через UDF, типа: f_cl_name(id_cl,id_view).
Но хочется попробовать уйти от функции.
...
Рейтинг: 0 / 0
Как правильно написать такой запрос: ...
    #32579195
Aleksey Kh.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А изначально все пошло от того, что в 987 местах выводится такое "сборное" имя и везде по разному (а надо-то было 2-3 четких разновидности).
Решил это дело централизовать. Сделал через UDF. Под АСА8 работало быстро, под АСА9 намного медленнее.
У меня есть впечатление, что кеширование функций под 9кой не работает.
И вообще, у меня к АСА9 много претензий (в основном, из-за того, что быстро работало под 8кой, перестало быстро работать под 9кой, без каких-либо изменений структуры).
...
Рейтинг: 0 / 0
Как правильно написать такой запрос: ...
    #32579201
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем все это ? Ну можно сделать 3 view. Но не понятно, зачем ?
Чтобы запрос с клиента всегда был одинаковым ? Не получится все равно, тебе id_view='вид1' надо будет разные задавать. А тогда - зачем ?
...
Рейтинг: 0 / 0
Как правильно написать такой запрос: ...
    #32579229
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сделал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT fname || ' ' || lname AS Name,  1  as Flag
FROM branch.t_cl;
UNION
SELECT lname || ', ' || age AS Name,  2  as Flag
FROM branch.t_cl;
UNION
SELECT lname || ', ' || fname AS Name,  3  as Flag
FROM branch.t_cl;

...
Рейтинг: 0 / 0
Как правильно написать такой запрос: ...
    #32579230
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Присоединяюсь к MasterZiv - зачем спрашивается так делать ? Такая "универсальность" кроме тормозов ничего не даст. Если у Вас в одном отчете могут использоваться разные представления имен, то значит клиент должен получать набор данных и сам соединять и форматировать поля как ему хочется. Или же клиент может генерить запрос так, как ему нужно динамически и потом выполнять его. Конечно все это можно проделать и на уровне СУБД, например хранимой процедурой, но IMHO это будет извращение, так как овчинка просто выделки не стоит.
...
Рейтинг: 0 / 0
Как правильно написать такой запрос: ...
    #32579265
Aleksey Kh.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Я еще раз повторяю: для централизованного управления отображением названий. Т.е. если в 345 случаях из 987 надо добавить возраст в "название", то делать это не в 345 запросах, а только в одной вьюхе.

Кроме того, так можно устраивать поиск по получившемуся имени. В случае подзапросов довольно сложные конструкции получаются.

В принципе, все м.б. довольно просто (я сам догадался):
Код: plaintext
1.
2.
3.
4.
create view v_cl_name as 
((select ..., 'вид1' as id_view from t_cl)
union all
((select ..., 'вид2' as id_view from t_cl))

Только вот в таблице t_cl несколько десятков тысяч записей и для формирования имени к ней еще таблицы цепляются - при такой реализации тормозить не будет? Как там оптимизатор в 9ке - с union дружит?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как правильно написать такой запрос: ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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