venom99
@venom99

Как исправить запрос?

С workbench (Mysql) нужно перенести запрос на sql server. Запрос показывает общую сумму средств, которую заработали тренера за конкретный месяц, продавая услуги в виде индивидуальных занятий.
Workbench:

61640943144e3828763772.png
select sotrudniki.fio_sot as 'ФИО сотрудника', search_may.cost_may as 'may', search_jun.cost_jun as 'june'
from sotrudniki inner join (select oplata_ind_uslug.kod_uslugy, oplata_ind_uslug.kod_poseshenya, oplata_ind_uslug.date_oplat, price_list.vidy_ind_zanatiy, sum(price_list.coast_ind_uslug) as 'cost_may', sotrudniki.fio_sot from sotrudniki inner join (oplata_ind_uslug inner join price_list on oplata_ind_uslug.kod_price_list = price_list.kod_price_list) on sotrudniki.kod_sot = oplata_ind_uslug.kod_sot where month(oplata_ind_uslug.date_oplat) = 05 group by sotrudniki.fio_sot) as search_may on sotrudniki.fio_sot = search_may.fio_sot
inner join
(select oplata_ind_uslug.kod_uslugy, oplata_ind_uslug.kod_poseshenya, oplata_ind_uslug.date_oplat, price_list.vidy_ind_zanatiy, sum(price_list.coast_ind_uslug) as 'cost_jun', sotrudniki.fio_sot from sotrudniki inner join (oplata_ind_uslug inner join price_list on oplata_ind_uslug.kod_price_list = price_list.kod_price_list) on sotrudniki.kod_sot = oplata_ind_uslug.kod_sot where month(oplata_ind_uslug.date_oplat) = 06 group by sotrudniki.fio_sot) as search_jun on sotrudniki.fio_sot = search_jun.fio_sot
group by sotrudniki.fio_sot;


Sql Server:

61640ada19d9f474693058.png
use sportclub
select sotrudniki.fio_sot as 'ФИО сотрудника', sum(search_may.cost_may) as 'may', sum(search_jun.cost_jun) as 'june'
from sotrudniki
inner join (select oplata_ind_uslug.kod_uslugy, oplata_ind_uslug.kod_poseshenya, oplata_ind_uslug.date_oplat, price_list.vidy_ind_zanatiy, price_list.coast_ind_uslug as 'cost_may', sotrudniki.fio_sot from sotrudniki
inner join (oplata_ind_uslug inner join price_list on oplata_ind_uslug.kod_price_list = price_list.kod_price_list) on sotrudniki.kod_sot = oplata_ind_uslug.kod_sot where month(oplata_ind_uslug.date_oplat) = 05 group by sotrudniki.fio_sot, oplata_ind_uslug.kod_uslugy, oplata_ind_uslug.kod_poseshenya, oplata_ind_uslug.date_oplat, price_list.vidy_ind_zanatiy, price_list.coast_ind_uslug) as search_may on sotrudniki.fio_sot = search_may.fio_sot

inner join (select oplata_ind_uslug.kod_uslugy, oplata_ind_uslug.kod_poseshenya, oplata_ind_uslug.date_oplat, price_list.vidy_ind_zanatiy, price_list.coast_ind_uslug as 'cost_jun', sotrudniki.fio_sot from sotrudniki
inner join (oplata_ind_uslug inner join price_list on oplata_ind_uslug.kod_price_list = price_list.kod_price_list) on sotrudniki.kod_sot = oplata_ind_uslug.kod_sot where month(oplata_ind_uslug.date_oplat) = 06 group by sotrudniki.fio_sot, oplata_ind_uslug.kod_uslugy, oplata_ind_uslug.kod_poseshenya, oplata_ind_uslug.date_oplat, price_list.vidy_ind_zanatiy, price_list.coast_ind_uslug) as search_jun on sotrudniki.fio_sot = search_jun.fio_sot
group by sotrudniki.fio_sot


Уже при работе с sql server частично исправил запрос, чтобы выводилась хоть какая-то информация, но в итоге всё равно не корректные цифры, почему-то прибыль одного тренера умножается на 3, а другого на 2.
  • Вопрос задан
  • 41 просмотр
Пригласить эксперта
Ответы на вопрос 2
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
Документация.
Использовать
-- Aggregate Function Syntax    
SUM ( [ ALL | DISTINCT ] expression )

или
-- Analytic Function Syntax   
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
Ответ написан
Комментировать
@Olgeir
джойны нужно переписать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы