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

Откуда:
Сообщений: 6
Исходные данные:

3 таблицы:

Таблица 1: Агенты
Столбцы:
- агент_id
- ФИО

Таблица 2: Виды страхования
Столбцы:
- вид_id
- наименование
- комиссия

Таблица 3: Договор
Столбцы:
- договор_id
- стр_сумма
- стр_премия
- агент_id
- вид_id

Задача:
Создать хранимую процедуру с параметром, позволяющую вычислить итоговую сумму комиссионного вознаграждения в разрезе агентов с сортировкой по Ф.И.О. по заданному коду вида страхования.
Расчет комиссионного вознаграждения производится по формуле Комиссионное_вознаграждение = (Стр_премия * Комиссия)/100

Решение: в части комиссии
SELECT (Договоры.Стр_премия*Виды_страхования.Комиссия)/100
from Договоры inner join Виды_страхования
on Договоры.Вид_id = Виды_страхования.Вид_id

Вопрос:
как добавить ФИО и сортировку сотрудников?

Спасибо за помощь)
12 дек 20, 00:59    [22246728]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32173
Antairka
как добавить ФИО и сортировку сотрудников?
Добавить ещё один join - для агентов.
12 дек 20, 01:02    [22246731]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
Antairka
Member

Откуда:
Сообщений: 6
alexeyvg, да, конечно, но вот у меня не выходит(


вот такой код:

SELECT Агенты.ФИО, (Стр_премия*Виды_страхования.Комиссия)/100
from Агенты inner join (Договоры inner join Виды_страхования
on Договоры.Вид_id = Виды_страхования.Вид_id)
on Агенты.агент_id = Договоры.Агент_id

выходит вот такая ошибка:

сообщение: 245, уровень: 16, состояние: 1, процедура: my_proc7, строка: 16 [строка начала пакета: 37]
Ошибка преобразования значения nvarchar "Иванова И.И.
12 дек 20, 01:19    [22246733]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
Antairka
Member

Откуда:
Сообщений: 6
Antairka, точнее такая сообщение: 245, уровень: 16, состояние: 1, процедура: my_proc7, строка: 16 [строка начала пакета: 40]
Ошибка преобразования значения nvarchar "Иванова И.И.

понимаю проблему несовместимости, но не понимаю как исправить(
12 дек 20, 03:53    [22246756]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
godsql
Member

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

Имелось ввиду
SELECT Агенты.ФИО, (Договоры.Стр_премия*Виды_страхования.Комиссия)/100
from Договоры 
inner join Виды_страхования on Договоры.Вид_id = Виды_страхования.Вид_id
inner join Агенты on Агенты.id=Договоры.агент_id 


PS. 1C какая-нибудь?
12 дек 20, 10:52    [22246772]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 58363
Antairka,

1. обрезан текст ошибки
2. неизвестна структура таблиц и данные в них. Навскидку - перепутаны типы
12 дек 20, 10:56    [22246773]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
godsql
Member

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

Смотрите пакет, смотрите, что куда записывается в строчках 37-40
12 дек 20, 11:19    [22246775]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
Antairka
Member

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

святейший человек, спасибо) я не до конца поняла смысл объединения, таблиц, спасибо огромное)

P.S. в моем случае сортировка не требуется, но если б была нужна, то куда order by вставлять?

куда ни вставь везде ругается на синтаксис, но вроде нет его у order by

сообщение: 156, уровень: 15, состояние: 1, процедура: my_proc2, строка: 15 [строка начала пакета: 15]
Неправильный синтаксис около ключевого слова "order".
12 дек 20, 13:06    [22246793]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
Antairka
Member

Откуда:
Сообщений: 6
andreymx, спасибо, поняла ошибку)
12 дек 20, 13:07    [22246794]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
godsql
Member

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

если просто по фио.

SELECT Агенты.ФИО, (Договоры.Стр_премия*Виды_страхования.Комиссия)/100
from Договоры 
inner join Виды_страхования on Договоры.Вид_id = Виды_страхования.Вид_id
inner join Агенты on Агенты.id=Договоры.агент_id 
order by Агенты.ФИО
12 дек 20, 14:01    [22246814]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
Antairka
Member

Откуда:
Сообщений: 6
godsql, мда уж, а вот перенести на новую строчку я не догадалась( спасибо огромное)))))
12 дек 20, 17:04    [22246889]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
godsql
Member

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

при чем тут новая строчка?
Это чисто для удобства
можно записать так
SELECT Агенты.ФИО, (Договоры.Стр_премия*Виды_страхования.Комиссия)/100 from Договоры inner join Виды_страхования on Договоры.Вид_id = Виды_страхования.Вид_id inner join Агенты on Агенты.id=Договоры.агент_id order by Агенты.ФИО

и все будет работать
12 дек 20, 20:56    [22247012]     Ответить | Цитировать Сообщить модератору
 Re: Отсортировать по имени  [new]
Krevetka74
Member

Откуда:
Сообщений: 1
Добрый день!
Господа, всё-таки нужна помощь.
Аналогичная структура, задача та же:
В БД INSURANCE создать хранимую процедуру с параметром, позволяющую вычислить итоговую сумму комиссионного вознаграждения в разрезе агентов с сортировкой по Ф. И. О. по заданному коду вида страхования.

Пишу:
select агенты.ФИО , (Договоры.стр_премия * виды_страхования.комиссия ) /100 from Договоры
inner join виды_страхования on Договоры.вид_id = виды_страхования.вид_id
inner join Агенты on Договоры.агент_id = Договоры.агент_id
order by Агенты.ФИО

На выходе 36 строк:
+

Иванова А.А. 3000.000000
Иванова А.А. 500.000000
Иванова А.А. 750.000000
Иванова А.А. 18200.000000
Иванова А.А. 1950.000000
Иванова А.А. 5516.000000
Иванова А.Б. 5516.000000
Иванова А.Б. 1950.000000
Иванова А.Б. 18200.000000
Иванова А.Б. 750.000000
Иванова А.Б. 500.000000
Иванова А.Б. 3000.000000
Петрова А.А 3000.000000
Петрова А.А 500.000000
Петрова А.А 750.000000
Петрова А.А 18200.000000
Петрова А.А 1950.000000
Петрова А.А 5516.000000
Петрова А.Б. 5516.000000
Петрова А.Б. 1950.000000
Петрова А.Б. 18200.000000
Петрова А.Б. 750.000000
Петрова А.Б. 500.000000
Петрова А.Б. 3000.000000
Сидорова А.А 3000.000000
Сидорова А.А 500.000000
Сидорова А.А 750.000000
Сидорова А.А 18200.000000
Сидорова А.А 1950.000000
Сидорова А.А 5516.000000
Сидорова А.Б. 5516.000000
Сидорова А.Б. 1950.000000
Сидорова А.Б. 18200.000000
Сидорова А.Б. 750.000000
Сидорова А.Б. 500.000000
Сидорова А.Б. 3000.000000



Что я делаю не так?

К сообщению приложен файл. Размер - 30Kb


Сообщение было отредактировано: 23 ноя 21, 15:42
23 ноя 21, 15:36    [22399734]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить