Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2019, 12:37   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию [БД FireBird] Ограничить количество строк с таблицы JOIN

Доброе время суток форумчане
Есть вот такой запрос

Код:
select c.*,
   cl.NAME_ORGANIZATION_FULL as cl_NAME_ORGANIZATION_FULL, cl.TYPE_NP || cl.CITY as cl_NP, cl.ID as cl_CLIENT_ID,
   cc.LIST_PROPOSAL_NUMBER_IN as cc_LIST_PROPOSAL_NUMBER_IN,
   b.BANK_COUNT as b_BANK_COUNT, b.NAME as b_NAME, b.CITY as b_CITY,
   pd.PAID_STATUS as pd_PAID_STATUS, pd.ID as pd_ID,
   a.NUMBER_ACCOUNT as a_NUMBER_ACCOUNT, a.DATE_NUMBER_ACCOUNT as a_DATE_NUMBER_ACCOUNT, a.ID as a_ID,
   ce.EXECUTE_BEGIN as ce_EXECUTE_BEGIN, ce.EXECUTE_END as ce_EXECUTE_END, ce.CONTRACT_FRAME as ce_CONTRACT_FRAME, ce.CONTRACT_NUMBER as ce_CONTRACT_NUMBER, ce.SORT_WORK_LIST as ce_SORT_WORK_LIST,
   ct.PROPOSAL_ID as ct_PROPOSAL_ID,   p.NUMBER_IN as NUMBER_IN
       from CONTRACT c
       left join V_STATISTIC_CONTRACT cc on cc.CONTRACT_ID = c.ID
       join CROSS_T ct on ct.CONTRACT_ID = c.ID and ct.CONTRACT_DELETE is null
       join PROPOSAL p on p.ID = ct.PROPOSAL_ID
       join CLIENT cl on cl.ID = ct.CLIENT_ID
       left outer join BANK b on b.CONTRACT_ID = c.ID
       left outer join PLAN_D pd on pd.CONTRACT_ID = c.ID
       left outer join ACCOUNTANCY a on a.CONTRACT_ID = c.ID
       left outer join CONTRACT_EXTRA ce on ce.CONTRACT_ID = c.ID
           where  c.DEPARTMENT_ID_EXECUTE = 13 and (ce.EXECUTE_END>'25.05.2019' or ce.EXECUTE_END is null)  order by c.ID desc

он выдает результат одну строку (допустим одну строку договора).
Есть таблица «ACCOUNTANCY», в которой содержится номер счета по этому договору.
Вот..
С некоторых пор, по одному договору может стало возможным добавлять несколько номеров счетов (просто в «ACCOUNTANCY» одно и то же CONTRACT_ID ссылка на договор). Следовательно, у меня уже этот запрос выдает несколько одинаковых строк договоров, что не есть хорошо…

Вопрос можно ли как-то в
left outer join ACCOUNTANCY a on a.CONTRACT_ID = c.ID

ограничить выборку до одной строки, или мне в «ACCOUNTANCY» делать дополнительное поле, например, «NUMBER_BASE» (основной счет) и в одном из строк с номерами счетов например ставить в нем значение «1», а во всех других «0», если в одном договоре много счетов и тогда
left outer join ACCOUNTANCY a on a.CONTRACT_ID = c.ID and NUMBER_BASE=1

Заранее спасибо за ответ

P.S.
А еще одно, у меня осталась возможность показывать номер счета в строке договора, если в договоре он ОДИН
KBO вне форума Ответить с цитированием
Старый 26.05.2019, 13:01   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну коль появилось понятие основной счет, то используй его. И там где счет один тоже
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.05.2019, 13:25   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ну коль появилось понятие основной счет, то используй его. И там где счет один тоже
т.е.

Код:
left outer join ACCOUNTANCY a on a.CONTRACT_ID = c.ID and NUMBER_BASE=1
P.S.
Дополнительное поле "ОСНОВНОЙ СЧЕТ" придумал я пару часов назад, чтоб использовать его в запросе для ограничения
KBO вне форума Ответить с цитированием
Старый 26.05.2019, 13:35   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

То есть это фикция и они все равноправны? Если для отображения, то можно в основном запросе вообще не дергать табличку счетов, а взять отдельным запросом и отображать их в дочернем гриде для текущей строки основного грида. Если не важно какой, то с дополнительным реквизитом проще всего, иначе запрос сильно утяжелится - там выбирает три поля с него и для каждого из них свой подзапросик сделать нужно с FIRST
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ограничить количество подключений к БД Firebird Vit@L БД в Delphi 25 27.10.2015 12:28
Ограничить количество строк в ListBox konstantin1990 Microsoft Office Excel 21 30.08.2013 15:07
ограничить количество строк vostok Microsoft Office Excel 7 02.01.2013 18:42
Сканирования строк. Зная количество строк и первый элемент, это количество символов с троке. dimon9 Общие вопросы C/C++ 8 02.11.2012 22:40
Access ограничить значение поля таблицы значениями полей другой таблицы Сергей089 Microsoft Office Access 10 08.12.2010 02:22