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

Откуда:
Сообщений: 16
Текст запроса :"Составить список видов страхования за указанный период,упорядоченный по их рентабельности(общая сумма денег, полученная фирмой по договорам, где страховое событие не наступило -(минус) общая сумма выплаченных страховок), отдельно для каждой возрастной группы по десятилетиям. При выполнении данного запроса проверить, попадают ли даты наступления страховых событий в сроки действия соответствующего договора и выдать предупреждение об ошибке"
Доп. сведения: 1. Выплаченные страховки - 120% от стоимости договора 2.Деньги,полученные по договорам, где страховое событие не наступило - 100% от стоимости договора.
Скриншот с диаграммой базой данных приложил к теме. Все даты в типе Date,все тексты в типе Varchar, деньги - Money, остальные - int. Хотя я думаю для реализации запроса достаточно знать названия столбцов :
-Contract_Cost - стоимость договора
-Date_Insurance_Event - дата наступления страхового события
-Type - вид страхования(Insurance_ID - номер)
-Client_Age - возраст клиента (тип int - 32, 25, и т.д.)
-Date_Start, Date_Finish - соответственно дата заключения и окончания страхового договора.
Если чего-то не хватает для понимания общей картины БД или понимания сути запроса я попытаюсь вам помочь, чтобы вы могли мне помочь =).
Выручите , пожалуйста ,люди со здравым умом, а то мои мозги уже плавятся от постоянных ошибок во время попыток создания этого запроса.

К сообщению приложен файл. Размер - 47Kb
18 ноя 14, 18:57    [16867722]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
И что же конкретно у ваc не получается?

Сообщение было отредактировано: 18 ноя 14, 18:58
18 ноя 14, 18:58    [16867736]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
Гавриленко Сергей Алексеевич,
У меня не получается сформировать общее представление о структуре этого запроса: пытался делать подзапрос рентабельности, но потом застопорился каким образом по этой рентабельности отсортировать типы страхования, разве что в Order by можно запихнуть разность двух запросов(но я новичок в этом деле и не уверен в правильности решения). Я не понимаю последовательности действий в запросе и какими операторами это реализовать. Просто прошу помощи, я не осилил этого даже на уровне структуры относительно T-SQL
18 ноя 14, 19:06    [16867792]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
btahkeeeeeeeee
У меня не получается сформировать общее представление о структуре этого запроса: пытался делать подзапрос рентабельности, но потом застопорился каким образом по этой рентабельности отсортировать типы страхования, разве что в Order by можно запихнуть разность двух запросов(но я новичок в этом деле и не уверен в правильности решения). Я не понимаю последовательности действий в запросе и какими операторами это реализовать.
В смысле, у вас получилось написать запрос, получающий правильные данные (в том числе рентабельность), но не получилось отсортировать по этой рентабельности?

Напишите результат ваших изысканий, получившиеся запросы, поможем.
18 ноя 14, 19:24    [16867908]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
alexeyvg,
(select sum(Contract_Cost) as summa_ne_nastupilo,
Insurance_ID
from Contract
where Date_insurance_event not between '12-12-12' and '12-10-14'
group by Insurance_ID)

(select sum(Contract_Cost*1.2) as summa_nastupilo,
Insurance_ID
from Contract
where Date_insurance_event between '12-12-12' and '12-10-14'
group by Insurance_ID)

Чтобы получить рентабельность мне нужно вывести таблицу, в которой в строке Rentabelnost' будет записано: "Rentabelnost' =
summa_nastupilo - summa_ne_nastupilo, where Insurance_ID=Insurance_ID" , ну это только по сути, я ни в коем случае не говорю что такой должен быть код, я просто не знаю как это реализовать. Затем по этой таблице мне нужно отсортировать Типы страхования, то есть в результате должна быть таблица отсортированная таблица со отсортированными значениями по рентабельности страхования.

К сообщению приложен файл. Размер - 15Kb
18 ноя 14, 20:06    [16868077]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
select sum(case when Date_insurance_event not between '12-12-12' and '12-10-14' then Contract_Cost end) as summa_ne_nastupilo, 
sum(case when Date_insurance_event between '12-12-12' and '12-10-14' thenContract_Cost*1.2) as summa_nastupilo,
Insurance_ID
from Contract 
group by Insurance_ID


Сообщение было отредактировано: 18 ноя 14, 20:30
18 ноя 14, 20:28    [16868195]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
Glory,в первом запросе Date_Insurance_Event попадает в промежуток времени, во втором - нет, в вашем запросе почему-то нигде не попадает.
18 ноя 14, 20:30    [16868210]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
Glory,
простите, отобразилась почему-то не эта картинка что сейчас, или вы изменили, сейчас проверю этот вариант
18 ноя 14, 20:31    [16868218]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
select sum(case when Date_insurance_event not between '12-12-12' and '12-10-14' then Contract_Cost end) as summa_ne_nastupilo, 
sum(case when Date_insurance_event between '12-12-12' and '12-10-14' then Contract_Cost*1.2 end) as summa_nastupilo,
Insurance_ID
from Contract 
group by Insurance_ID
18 ноя 14, 20:32    [16868222]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
Glory,
как сделать так , чтобы summa_nastupilo и summa_ne_nastupilo попали в одну колонку в виде их разности + к этому все это сделать относительно Insurance_ID.
18 ноя 14, 20:37    [16868253]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
select sum(case when Date_insurance_event not between '12-12-12' and '12-10-14' then Contract_Cost end)  -
sum(case when Date_insurance_event between '12-12-12' and '12-10-14' then Contract_Cost*1.2 end) as summa,
Insurance_ID
from Contract 
group by Insurance_ID
18 ноя 14, 20:45    [16868300]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
Glory
select sum(case when Date_insurance_event not between '12-12-12' and '12-10-14' then Contract_Cost end)  -
sum(case when Date_insurance_event between '12-12-12' and '12-10-14' then Contract_Cost*1.2 end) as summa,
Insurance_ID
from Contract 
group by Insurance_ID
Как избивиться от наличия нулевых значений?
18 ноя 14, 20:54    [16868329]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
Glory
select sum(case when Date_insurance_event not between '12-12-12' and '12-10-14' then Contract_Cost end)  -
sum(case when Date_insurance_event between '12-12-12' and '12-10-14' then Contract_Cost*1.2 end) as summa,
Insurance_ID
from Contract 
group by Insurance_ID


К сообщению приложен файл. Размер - 15Kb
18 ноя 14, 20:55    [16868332]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
Glory
select sum(case when Date_insurance_event not between '12-12-12' and '12-10-14' then Contract_Cost end)  -
sum(case when Date_insurance_event between '12-12-12' and '12-10-14' then Contract_Cost*1.2 end) as summa,
Insurance_ID
from Contract 
group by Insurance_ID


К сообщению приложен файл. Размер - 8Kb
18 ноя 14, 20:55    [16868335]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
btahkeeeeeeeee
Glory
select sum(case when Date_insurance_event not between '12-12-12' and '12-10-14' then Contract_Cost end)  -
sum(case when Date_insurance_event between '12-12-12' and '12-10-14' then Contract_Cost*1.2 end) as summa,
Insurance_ID
from Contract 
group by Insurance_ID



Картинка с другого сайта.

Один запрос не может сформировать два набора данных
И тем более он не может сформировать наборы с именами полей, отличных от их имен в тексте запроса
18 ноя 14, 20:57    [16868343]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
Glory
btahkeeeeeeeee
пропущено...


Картинка с другого сайта.

Один запрос не может сформировать два набора данных
И тем более он не может сформировать наборы с именами полей, отличных от их имен в тексте запроса
я скинул не тот скриншот, извиняюсь, вот я в предыдущем посте кинул соответствующий :

К сообщению приложен файл. Размер - 8Kb
18 ноя 14, 20:59    [16868347]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
btahkeeeeeeeee
я скинул не тот скриншот, извиняюсь, вот я в предыдущем посте кинул соответствующий :

Картинка с другого сайта.

И что вам тут не нравится ?
18 ноя 14, 21:42    [16868491]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
Glory
btahkeeeeeeeee
я скинул не тот скриншот, извиняюсь, вот я в предыдущем посте кинул соответствующий :

Картинка с другого сайта.

И что вам тут не нравится ?
в колонке Summa предполагаются значения 13.2 , 6 , 43.2, 15.6, 66, то есть разность полученных значений, почему выдает NULL там , где "43.2 - NULL"?

К сообщению приложен файл. Размер - 8Kb
18 ноя 14, 21:57    [16868535]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
select sum(case when Date_insurance_event not between '12-12-12' and '12-10-14' then Contract_Cost else 0.00 end)  -
sum(case when Date_insurance_event between '12-12-12' and '12-10-14' then Contract_Cost*1.2 else 0.00 end) as summa,
Insurance_ID
from Contract 
group by Insurance_ID
18 ноя 14, 22:15    [16868596]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

Откуда:
Сообщений: 16
Glory
select sum(case when Date_insurance_event not between '12-12-12' and '12-10-14' then Contract_Cost else 0.00 end)  -
sum(case when Date_insurance_event between '12-12-12' and '12-10-14' then Contract_Cost*1.2 else 0.00 end) as summa,
Insurance_ID
from Contract 
group by Insurance_ID


Теперь рентабельность найдена правильно.Спасибо большое. Теперь идем дальше =)
select (sum(case when Date_insurance_event  between '12-12-12' and '12-10-14' then Contract_Cost*1.2 else 0.00 end)) -
(sum(case when Date_insurance_event not between '12-12-12' and '12-10-14' then Contract_Cost else 0.00 end))
 as Rentabelnost, 
 a.Insurance_ID,avg(Type) as TYPPPE
from Contract as a inner join Client as b on a.Client_ID=b.Client_ID 
inner join Insurance as c on a.Insurance_ID=c.Insurance_ID
where b.Client_Age between 20 and 30
group by a.Insurance_ID,c.Type
order by Rentabelnost

Вот я у себя добавил ещё тип страховки, соединил с таблицей возрастов, сделал условие возраста.
Осталась последняя часть запроса: "При выполнении этого запроса проверить, попадают ли даты наступления страховых событий в сроки действия соответствующего договора , и выдать сообщение об ошибке". Это возможно в менеджмент студии вообще?
18 ноя 14, 22:39    [16868702]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
btahkeeeeeeeee
"При выполнении этого запроса проверить, попадают ли даты наступления страховых событий в сроки действия соответствующего договора , и выдать сообщение об ошибке".

Так вам данные нужны или сообщение об ошибке - вы уж определитесь
18 ноя 14, 23:39    [16868892]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пожалуйста, сделать сложный (для моего восприятия) запрос  [new]
btahkeeeeeeeee
Member

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

Я же не придумываю, мне дали такое задание... Наверное , я это реализую уже через ADO.NET в визуал студии через исключение. Я отпишу по этому поводу сюда, если что-то не получится, а вам за все ОГРОМНОЕ СПАСИБО, ещё раз =)
19 ноя 14, 00:03    [16868981]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить