Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 проблема в алгоритме (select с кучей условий),help...  [new]
HAMEL
Member

Откуда:
Сообщений: 6
всем привет.никак не могу сообразить каким путём пойти и правильно составить алгоритм выборки.общая картина такова: имеется временная таблице с информацией о кредитах,в которой сведения как о текущем кредите клиента(полей достаточно много и перечислять я их не стану),так и о последних закрытых кредитах(1 или максимум 2 кредита) . номер клиента уникальный. нужно заполнить вторую таблицу,в которой собственно и будет храниться результат,но вся проблема в том,что сначала надо проверить уйму условий(14-17 пунктов) и только в случае нарушения хотя бы одного из них в таблицу резельтата должен попасть как текущий кредит,так и покрытый(а исходя из одного из условий оба покрытых). я так понимаю , что без длинющего условия where не обойтись? не очень хочется перегружать условие при заполнении таблицы(для быстроты и надёжности), т.к. этот where будет состоять из под-select-ов и даже парочки case..... есть какие-нить варианты оптимального решения проблемы? также подумывал на каждое условие свой новый insert,чтобы всё вместе не писать и не намудрить )) но мне кажется это фиговый выход из положения. и ёще, не совсем понимаю как потащить в таблицу результата одновременно текущий и закрытый кредит клиента,если исполнится одно из условий?
надеюсь на вашу помощь! спасибо заранее.
P.S. я постарался максимально всё описать но если вам не хватит инфы что-бы помочь-я постараюсь более подробно поставить задачу.
29 июн 11, 22:24    [10896092]     Ответить | Цитировать Сообщить модератору
 Re: проблема в алгоритме (select с кучей условий),help...  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
HAMEL,

Локальная временная таблица живет, пока её не прибьют, или пока не закроется коннекшн.
Или, например, внутри scope процедуры.

Так кто мешает разбить всю проверку на кучу коротких и более простых запросов, не обрывая соединения с сервером?
И пихать одним скриптом для выполнения?
Или, оформить всё внутри процедуры?

Оптимальное решение проблемы - это разделяй и властвуй.
Очень длинные запросы с кучей вложенных подзапросов - как правило работают медленнее, чем скрипт из нескольких отдельных небольших запросов.
29 июн 11, 22:32    [10896113]     Ответить | Цитировать Сообщить модератору
 Re: проблема в алгоритме (select с кучей условий),help...  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
HAMEL,

много insert-ов - тоже не выход.
Лучше постараться всё прокрутить внутри скрипта, в локальных переменных, и только потом выдать на гора одним инсертом.

if <пока всё ок> begin
...
end
if <пока всё ок> begin
...
end
if <пока всё ок> begin
...
end
if <что-то отвалилось? надо вставить?> begin
insert....
end
29 июн 11, 22:36    [10896123]     Ответить | Цитировать Сообщить модератору
 Re: проблема в алгоритме (select с кучей условий),help...  [new]
HAMEL
Member

Откуда:
Сообщений: 6
Makar4ik,

в итоге это будет процедура,поэтому и хочется шустрый скрипт сбацать. ладно,это ответ на один вопрос(по поводу записи условий),а что насчёт второго? как одним махом потащить текущий и перекрытый кредит конкретно клиента если выполнится одно из этих злополучных условий? в таблице упорядочено всё по номеру клиента и статусу,тоесть сначала идут закрытые кредиты-потом текущий.
29 июн 11, 22:40    [10896136]     Ответить | Цитировать Сообщить модератору
 Re: проблема в алгоритме (select с кучей условий),help...  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
HAMEL
Makar4ik,

в итоге это будет процедура,поэтому и хочется шустрый скрипт сбацать. ладно,это ответ на один вопрос(по поводу записи условий),а что насчёт второго? как одним махом потащить текущий и перекрытый кредит конкретно клиента если выполнится одно из этих злополучных условий? в таблице упорядочено всё по номеру клиента и статусу,тоесть сначала идут закрытые кредиты-потом текущий.


Слишком общий вопрос. Недостаточно информации, чтобы понять, в чем суть.
"потащить текущий и перекрытый кредит конкретно клиента"
куда тащить, за что тащить, по чему тащить, с какой стороны тащилка выросла, и на сколько сантиметров?
Тут уже конкретная бизнес-логика. Как надо протащить - так и тащите.

Ну например:

if .... begin
<все проверки сразу>
end

if <надо тащить> begin
exec dbo.[немедленно_тащить] @clientID
end

:)
29 июн 11, 23:21    [10896248]     Ответить | Цитировать Сообщить модератору
 Re: проблема в алгоритме (select с кучей условий),help...  [new]
HAMEL
Member

Откуда:
Сообщений: 6
Makar4ik
HAMEL
Makar4ik,

в итоге это будет процедура,поэтому и хочется шустрый скрипт сбацать. ладно,это ответ на один вопрос(по поводу записи условий),а что насчёт второго? как одним махом потащить текущий и перекрытый кредит конкретно клиента если выполнится одно из этих злополучных условий? в таблице упорядочено всё по номеру клиента и статусу,тоесть сначала идут закрытые кредиты-потом текущий.


Слишком общий вопрос. Недостаточно информации, чтобы понять, в чем суть.
"потащить текущий и перекрытый кредит конкретно клиента"
куда тащить, за что тащить, по чему тащить, с какой стороны тащилка выросла, и на сколько сантиметров?
Тут уже конкретная бизнес-логика. Как надо протащить - так и тащите.

Ну например:

if .... begin
<все проверки сразу>
end

if <надо тащить> begin
exec dbo.[немедленно_тащить] @clientID
end

:)



к примеру:
поля: номер_клиента,номер_контракта,сумма_кредита,тип_кредита,месечный_взнос,статус_кредита (эти поля одинаковы как у покрытого так и у текущего кредита).
условия:1) тип покрытого и нового кредита разный ; 2) сумма нового кредита больше суммы покрытого; 3) месечный взнос нового больше

и теперь,если одно из этих условий true,то в таблицу result должны перейти все перечисленные поля перекрытого и тукущего кредитов этого клиента(собственно рабочий материал,что мы сравнивали между собой). это я собственно и спрашиваю как сделать ))
29 июн 11, 23:35    [10896286]     Ответить | Цитировать Сообщить модератору
 Re: проблема в алгоритме (select с кучей условий),help...  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
HAMEL
result должны перейти все перечисленные поля перекрытого и тукущего кредитов этого клиента(собственно рабочий материал,что мы сравнивали между собой). это я собственно и спрашиваю как сделать ))


insert into result(поле11, поле12, поле13, поле21, поле22, поле23) 
select перекрытый.поле1, перекрытый.поле2, перекрытый.поле3, текущий.поле1, текущий.поле2, текущий.поле3
from кредит перекрытый, кредит текущий
where перекрытый.ID = @ПерекрытыйID and текущий.ID = @текущийID

Формально - это точный ответ на поставленный вопрос.
Не устраивает ответ - надо вопрос формулировать точнее.
29 июн 11, 23:51    [10896324]     Ответить | Цитировать Сообщить модератору
 Re: проблема в алгоритме (select с кучей условий),help...  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
Тут на форуме - всего пара-тройка телепатов...
Да и то, они в это время уже спят.
Так что остальные форумчане, мысли угадывать не умеют.
Чтобы народ смог понять мысль - её надо правильно оформить в виде букв, выстроенных в нужном порядке. :)

Не в обиду.
Но иначе - никак. Пока не сформулируешь вопрос правильно - получишь много ненужных ответов не на свой вопрос.
30 июн 11, 00:00    [10896349]     Ответить | Цитировать Сообщить модератору
 Re: проблема в алгоритме (select с кучей условий),help...  [new]
HAMEL
Member

Откуда:
Сообщений: 6
Makar4ik
HAMEL
result должны перейти все перечисленные поля перекрытого и тукущего кредитов этого клиента(собственно рабочий материал,что мы сравнивали между собой). это я собственно и спрашиваю как сделать ))


insert into result(поле11, поле12, поле13, поле21, поле22, поле23) 
select перекрытый.поле1, перекрытый.поле2, перекрытый.поле3, текущий.поле1, текущий.поле2, текущий.поле3
from кредит перекрытый, кредит текущий
where перекрытый.ID = @ПерекрытыйID and текущий.ID = @текущийID

Формально - это точный ответ на поставленный вопрос.
Не устраивает ответ - надо вопрос формулировать точнее.


формально - лучше чем ничего )
30 июн 11, 00:01    [10896358]     Ответить | Цитировать Сообщить модератору
 Re: проблема в алгоритме (select с кучей условий),help...  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
HAMEL,

;)
С другой стороны, правильно сформулированный вопрос - очень часто сам в себе несет ответ???

И это хорошая практика.
Я писать совсем не разучился только по одной причине.
Время от времени дергаю чистые бумажки из принтера, чтобы сложив их вчетверо ручкой на них писать себе формулировки вопросов самому к себе.
30 июн 11, 00:12    [10896386]     Ответить | Цитировать Сообщить модератору
 Re: проблема в алгоритме (select с кучей условий),help...  [new]
HAMEL
Member

Откуда:
Сообщений: 6
Makar4ik,

Makar4ik,

согласен,что формулировка задание всегда облегчает жизнь программисту,сам об этом людям твержу. но,в данном случае,остаётся только привести структуру БД,полностью скопироовать таск и просить людей помоч? согласись что это нереально ;) я в самом начале отписал что если что-то не полностью написано то я поясню! да и не всегда дело в передатчике,порой приёмник на другую волну настроен ;)
30 июн 11, 06:03    [10896706]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить