Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Sql server 2012  [new]
slonyra
Member

Откуда:
Сообщений: 27
Подскажите пожалуйста!
Мне нужно выбрать кредиты, клиенты по которым имеют и просроченный и проблемный договор. Я создал временную таблицу с айдишниками договоров из которых нужно выбрать и написал скрипт:
Select kr.kredit
From #kred kr
Inner join dbo.kredity a on kr.kredit=a.kredit
Inner join(select b.klient
From dbo.klienty b
Inner join dbo.kredity a1 on b.klient=a1.klient
Inner join dbo.statusy c on a1.kredit=c.kredit
Inner join dbo.statusy c1 on a1.kredit=c1.kredit
Where c.status=12345 and c1.status=54321) k on kr.kredit=k.kredit
Group by kr.kredit
Order by kr.kredit

Статусы "12345" и "54321" это "проблемный" и "просроченный"
Этот запрос отсеивает большую часть ненужных кредитов, но все равно остаются те, клиенты которых имеют хотя бы один просроченный или проблемный договор
22 дек 15, 07:13    [18592073]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
slonyra
Member

Откуда:
Сообщений: 27
Если кому-то будет интересно, то я разобрался и нашел ошибку.
В условие надо было добавить дату окончания статуса:
And isnull(c.data_okonchaniy,getdate())>=cast(getdate() as date)

Может кто-нибудь сможет подсказать как оставшийся список разделить рандомно в пропорции 35/65?
22 дек 15, 07:57    [18592150]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
Glory
Member

Откуда:
Сообщений: 104760
slonyra
имеют хотя бы один просроченный или проблемный договор

Если ИЛИ, то почему c.status=12345 and c1.status=54321
Как вы себе вообще представляете одноврменное равенство c1.status И 12345 И 54321
22 дек 15, 08:09    [18592175]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
slonyra
Member

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

Про читайте еще раз мой вопрос. Там нет "или". Я написал и просроченные и проблемные. Но это уже не важно, я исправил ошибку
22 дек 15, 08:12    [18592177]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
Glory
Member

Откуда:
Сообщений: 104760
slonyra
Про читайте еще раз мой вопрос. Там нет "или". Я написал и просроченные и проблемные.

Конечно
"клиенты которых имеют хотя бы один просроченный или проблемный договор"
И даже если вы подумали написать И, то это не отменяет
"Как вы себе вообще представляете одноврменное равенство c1.status И 12345 И 54321"
22 дек 15, 08:19    [18592188]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
slonyra
Member

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

Я не виноват в том, что вы не умеете внимательно читать. Я написал, что у меня выводил мой запрос клиентов, которые "имеют хотя бы один просроченный или проблемный договор"
Вы правы в том, что одновременно статус не может быть и проблемным и просроченным. Для этого я написал:
...
Inner join dbo.kredity a1 on kr.kredit=a1.kredit
Inner join dbo.kredity a2 on kr.kredit=a2.kredit
Inner join dbo.statusy c on a1.status=c.status
Inner join dbo.statusy c1 on a2.status=c1.status
Where c.status=12345 and c1.status=54321
...
22 дек 15, 08:28    [18592214]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
slonyra
Member

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

Может вы сможете подсказать как оставшийся список разделить рандомно в пропорции 35/65?
22 дек 15, 08:30    [18592224]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
Glory
Member

Откуда:
Сообщений: 104760
slonyra
Может вы сможете подсказать как оставшийся список разделить рандомно в пропорции 35/65?

Руками.
22 дек 15, 08:35    [18592232]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
slonyra
Member

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

Спасибо за помощь
22 дек 15, 08:37    [18592237]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
Glory
Member

Откуда:
Сообщений: 104760
slonyra
Glory,

Спасибо за помощь

Вам помогать - только время зря тратить
22 дек 15, 08:38    [18592239]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
slonyra
Member

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

Извините за ваше зря потраченное время. Мне правда неудобно за то, что зря вас отвлек
22 дек 15, 08:44    [18592258]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
Beegoody
Member

Откуда: Москва
Сообщений: 20
Glory
slonyra
имеют хотя бы один просроченный или проблемный договор

Если ИЛИ, то почему c.status=12345 and c1.status=54321
Как вы себе вообще представляете одноврменное равенство c1.status И 12345 И 54321


ТС спрашивает немного другое. Запрос ужасен, но логика понятна(там разные алиасы c1 и с) одновременное равенство возможно по пересекающимся множествам статусов, ну да не мне Вам рассказывать )).

Можно сделать так

Ваш внутренний запрос переписать:

select b.klient,a1.kredit
From dbo.klienty b
Inner join dbo.kredity a1 on b.klient=a1.klient
Inner join dbo.statusy c on a1.kredit=c.kredit and c.status in (12345,54321)
group by b.klient,a1.kredit
having count(distinct c.status)=2

Полный получается так:
Select kr.kredit
From #kred kr
Inner join (Внутренний запрос) k on kr.kredit=k.kredit

Ну, что-то примерно такое Вам нужно.
22 дек 15, 10:35    [18592743]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
Glory
Member

Откуда:
Сообщений: 104760
Beegoody
ТС спрашивает немного другое.

ТС спрашивает это уже несколько тем подряд.
У него явные пробелы в понимании логики SQL.
22 дек 15, 10:39    [18592771]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
asdor
Member

Откуда: Москва
Сообщений: 506
Glory,

У него c.status=12345 and c1.status=54321
то бишь разные поля
22 дек 15, 12:33    [18593537]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
slonyra
Glory,

Может вы сможете подсказать как оставшийся список разделить рандомно в пропорции 35/65?


select top 35 percent *, RAND(number) r from spt_values order by r
22 дек 15, 13:23    [18593852]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
slonyra
Member

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

Спасибо! Ваш запрос проще в понимании, просто я с having еще не работал, поэтому не знал, что можно так сделать! Запрос выдает такой же результат, как и мой:)
Еще раз спасибо!
23 дек 15, 03:34    [18597293]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
slonyra
Member

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

Да, вы правы, у меня большие пробелы в понимании логики sql. Но это потому что я начал изучать его совсем недавно, и стараюсь заполнить пробелы самостоятельно. А у вас явная проблема с самооценкой, раз вы повышаете ее за счет принижения других в интернете. Были бы вы разумнее, вы бы не стали в грубой форме указывать на мои недостатки в знаниях, а просто "прошли бы мимо" моей просьбы о помощи.
23 дек 15, 03:40    [18597295]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
Владислав Колосов
Member

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

все же форум - это не школа начинающего программиста. Постарайтесь сначала информацию извлекать из справочных и обучающих материалов.
23 дек 15, 11:17    [18598156]     Ответить | Цитировать Сообщить модератору
 Re: Sql server 2012  [new]
Glory
Member

Откуда:
Сообщений: 104760
slonyra
Да, вы правы, у меня большие пробелы в понимании логики sql. Но это потому что я начал изучать его совсем недавно, и стараюсь заполнить пробелы самостоятельно. А у вас явная проблема с самооценкой, раз вы повышаете ее за счет принижения других в интернете. Были бы вы разумнее, вы бы не стали в грубой форме указывать на мои недостатки в знаниях, а просто "прошли бы мимо" моей просьбы о помощи.

И почему все, кто " начал изучать его совсем недавно" такие "хорошие" психологи ?
Сразу тебе и диагноз поставят и посоветуют что делать ?
Может вам и остаться психологом, а не лезть в sql ?

И еще пару советов
- если вам начальник на работе дал задание составить красивый отчет в экселе, то не надо называть это "я начал изучать sql"
- "изучать самостоятельно" не есть создание на форуме отдельной темы для каждой своей мысли вида "а что если" или "ой, быстрей помогите"
- не надо думать, что ваши потоки мыслей именно на этом форуме все ждали всю свою жизнь
- не надо лезть в незнакомое общество со своими правилами. У этого общества уже есть свои правила, но вы наверное считаете, что они на для вас
- http://citforum.ru/howto/smart-questions-ru.shtml
23 дек 15, 11:21    [18598186]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить