powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом
39 сообщений из 39, показаны все 2 страниц
Помогите с запросом
    #32478876
Запрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть табличка

ID NAME (varchar) TYPE(integer)
1 Название1 0
2 Название2 0
3 Название3 0
4 Название4 1

Надо составить запрос, чтоб получилось

NAME NAME
Название1 Название4
Название2 null
Название3 null

т.е. чтобы в первом поле были названия с типом 0, а во втором названия
с типом 1.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32478895
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то что-то не так в консерватории (судя по постановке задачи)...
Отдельная табличка с типами (TYPE) есть, или нету?
От этого зависит запрос.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32478899
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
SELECT T1.NAME, T2.NAME FROM TABLE T1 LEFT JOIN TABLE T2 ON (T2.TYPE = T1.ID AND T2.TYPE =  1 ) WHERE T1.TYPE =  0 


Best regards,
Dnico.
Best regards,
Dnico.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479010
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ведь фигня запрос.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479049
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясное дело, что спросил - то и получил

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479149
Запрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TO Dnico

Работает, но не совсем так как надо

Получается

Название1 null
Название2 null
Название3 null

И по поводу ON (T2.TYPE = T1.ID AND T2.TYPE = 1)
наверное T2.TYPE = T1.TYPE, но результат тот же


To Мимопроходящий

Таблички для TYPE нет
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479188
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, раз таблички для TYPE нет, то запрос, при большом количестве записей будет однозначно тормозным. Мне лично не понятно, как между собой связаны
записи содержащие "Название1" и "Название4". У них есть какой-то общий признак?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479222
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, что-то не клеится.. Возможен вариант, когда записей с type=0 будет меньше, чем с 1?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479226
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий записи содержащие "Название1" и "Название4". У них есть какой-то общий признак?
Если ID = Type, то вот так

Код: plaintext
1.
SELECT T1.NAME, T2.NAME FROM TABLE T1 LEFT JOIN TABLE T2 ON (T2.TYPE = T1.ID) WHERE T1.TYPE =  0 


Best regards,
Dnico.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479232
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, да это наверное дерево: ID - номер, Type - родитель
Тогда и получается такая связка : Название1 Название4 ,
но для деревьев совсем нужны другие запросы.

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479280
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дерево так точно не построишь -))
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479283
Запрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Напишу во всех подробностях.

Есть таблличка CULTURES содержащая информацию о
сельскохозяйственных культурах.
ID - идентификатор
NAME - название культуры
TYPE - тип севооборота (0-полевой, 1-почвозащттный)

Менять структуру уже нельзя.

Вывести надо так:

Полевые культуры || Почвозащитные культуры
Название1 Название4
Название2 null
Название3 null

To Dik76: Возможен вариант, когда записей с type=0 будет меньше, чем с 1?

Обычно так и будет.

Так что вот так.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479307
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё понятно. Вот он пример кривого проектирования...
Делай ЭТО в генераторе отчётов.
Не морокайся сотворить это запросом. Выхлоп не оправдает ожиданий.
Фактически ты имеешь тут 2 несвязанных кортежа,
которые пытаешься связать.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479449
Степа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимо - прав.
Если не секрет, то для чего такой вывод?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479453
Запрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Мимопроходящий

Видимо так и поступлю.
А по поводу структуры, так это скорее отчет такой специфический.
Для всего остального она полностью подходит.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479463
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, раз отчёт, так и делай его средствами построителя отчётов .
А никак не запросом.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479473
Запрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Степа

Так надо, у Заказчика в методичке х.з. какого года так сделано.

А вообще там все отчеты спецефические, без ХП хрен сделаешь.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479487
Запрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Мимопроходящий

Его сначала надо в гриде показать, а потом из формы с гридом уже отчет выводится.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479492
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторбез ХП хрен сделаешь

так и делай ХП, если запрос и удастся написать, то быстрым он точно не будет
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479510
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень любопытно посмотреть на такую SP
Изврат будет ещё тот...
Дело в том, что как я уже говорил, имеем 2 несвязанных кортежа. Для них соответственно нужно создавать 2 курсора. А IB/FB выполнять навигацию по 2-м и более курсорам одновременно внутри одного блока НЕ УМЕЕТ .
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479521
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все-таки не умеет... а то читаю ингда - умеет делать fetch из курсора, не умеет
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479545
Запрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Мимопроходящий

Знаю что НЕ УМЕЕТ. Напишу - опубликую :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479549
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fetch может сделать только клиент, вызвав функцию API isc_dsql_fetch() .
На стороне сервера это сделать нельзя.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479559
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда - Хателка!

Хочу создавать два курсора и фетчить их по очереди - и в ХП.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479563
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗапросЗнаю что НЕ УМЕЕТ. Напишу - опубликую :)
Приверженец нетрадиционного секса?
Сделать можно. Но только через Ж.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479571
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мим Очень любопытно посмотреть на такую SP

Дикая выборка получается, но работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  CREATE PROCEDURE WILD_SELECT (TYPE INTEGER )
RETURNS (WILD_ID INTEGER, NAME VARCHAR( 255 ))
AS 
BEGIN
  WILD_ID= 0 ;
  FOR SELECT NAME FROM TABLE1 WHERE TYPE = :TYPE INTO :NAME DO BEGIN
    WILD_ID=WILD_ID+ 1 ;
    SUSPEND;   
  END
END

А далее самое страшное:

Код: plaintext
1.
2.
SELECT W1.NAME NAME1, W2.NAME NAME from  WILD_SELECT W1 FULL JOIN
WILD_SELECT W2 ON (W1.WILD_ID=W2.WILD_ID)
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479591
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нижний запрос неверен.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479612
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нижний запрос неверен.
Не придирайся.

Код: plaintext
1.
2.
3.
SELECT W1.NAME NAME1, W2.NAME NAME from  WILD_SELECT( 0 ) W1 FULL JOIN

WILD_SELECT( 1 ) W2 ON (W1.WILD_ID=W2.WILD_ID)
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479628
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С чего ты взял, что я придираюсь?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479644
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, при некоторой модификации SP можно FULL заменить на INNER и запрос будет работать гораздо быстрее.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32479710
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Количество записей с TYPE = 1 и TYPE = 0 заранее неизвестно.
Каким макаром собираешься делать INNER ?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32480197
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неохота объяснять. Споры возникнуть насчет производительности, а мне некогда, проект надо здавать.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32480486
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты "на палцАх" поясни, мы догадливые, мы поймём
...
Рейтинг: 0 / 0
Помогите с запросом
    #32480538
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
  CREATE PROCEDURE WILD_SELECT (TYPE INTEGER )

RETURNS (WILD_ID INTEGER, NAME VARCHAR( 255 ))

AS

BEGIN

  WILD_ID= 0 ;

  FOR SELECT NAME FROM TABLE1 WHERE TYPE = :TYPE INTO :NAME DO BEGIN

    WILD_ID=WILD_ID+ 1 ;

    SUSPEND;  

  END
  FOR SELECT NAME FROM TABLE1 WHERE TYPE <> :TYPE INTO :NAME DO BEGIN
    NAME = null;
    WILD_ID=WILD_ID+ 1 ;

    SUSPEND;  

  END

END



Код: plaintext
1.
2.
3.
SELECT W1.NAME NAME1, W2.NAME NAME from  WILD_SELECT( 0 ) W1 FULL JOIN
WILD_SELECT( 1 ) W2 ON (W1.WILD_ID=W2.WILD_ID) WHERE W1.NAME IS NOT NULL AND W2.NAME IS NOT NULL



Вот такая идея. Как работает не проверял, некогда.
Это универсальный способ. Но если известно кол-во типов заранее, то ХП можно оптимизировать.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32480550
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй запрос не так написал.
Надо так:
Код: plaintext
1.
2.
3.
SELECT W1.NAME NAME1, W2.NAME NAME from  WILD_SELECT( 0 ) W1 INNER JOIN

WILD_SELECT( 1 ) W2 ON (W1.WILD_ID=W2.WILD_ID) WHERE W1.NAME IS NOT NULL OR W2.NAME IS NOT NULL
...
Рейтинг: 0 / 0
Помогите с запросом
    #32480741
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ох и могуч ты извращизмы писать
Замечу, что корректная работа данного метода возможна только в SNAPSHOT'е.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32480758
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так задача изначально была извратная.
Иного решения не могу придумать (да и времени нет), извиняйте.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32480764
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не нужно ничего придумывать.
Изначально было сказано - в сад с такой задачей.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32480783
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я для прикола.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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