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

Откуда:
Сообщений: 125
Добрый день!
Мне необходимо сделать округление процентов, но в итоге не выходит ровно 100
Пробовала с ROUND - безрезультатно.
В итоге нужно целое число

DECLARE @TOTAL_REQUESTS as INT
SET @TOTAL_REQUESTS = (SELECT COUNT(*) FROM [Group_New_DB].[dbo].[MYGROUPSM1] MG
  INNER JOIN [Group_New_DB].[dbo].[INCIDENTSM1] IM on MG.ID = IM.ASSIGNEE
  LEFT JOIN [Group_New_DB].[dbo].[SCRELATIONM1] SC on IM.INCIDENT_ID = SC.SOURCE
where MEMBER_OF like 'Группа операторов СД'
and IM.DDC_RESOLVE_TIME IS NOT NULL  and  (IM.OPEN_TIME >=  (@StartDate) and IM.OPEN_TIME < (@EndDate + 1))
)


SELECT					MG.[ID], 
						@TOTAL_REQUESTS as 'Всего',
						COUNT(MG.[ID]) as 'Всего выполнено', 
						COUNT(MG.[ID]) - COUNT(SC.SOURCE) as 'Выполненные самостоятельно',
						CAST((1.0 * (COUNT(MG.[ID]) - COUNT(SC.SOURCE)) / COUNT(MG.[ID]) * 100) AS decimal(38,0)) as 'Выполненные самостоятельно, %',
						CAST((CAST((1.0 * (COUNT(MG.[ID]) - COUNT(SC.SOURCE)) * 100) AS decimal(38,0)) / @TOTAL_REQUESTS) AS decimal(38,0)) as 'Выполненные самостоятельно, % от всех ',
						COUNT(SC.SOURCE) as 'Эскалированные',
						CAST((1.0 * COUNT(SC.SOURCE) / COUNT(MG.[ID]) * 100) AS decimal(36,0)) as 'Эскалированные, %',
						CAST((CAST((1.0 * (COUNT(SC.SOURCE)) * 100) AS decimal(38,0)) / @TOTAL_REQUESTS) AS decimal(38,2)) as 'Эскалированные, % от всех '						
  FROM [Group_New_DB].[dbo].[MYGROUPSM1] MG
  INNER JOIN [Group_New_DB].[dbo].[INCIDENTSM1] IM on MG.ID = IM.ASSIGNEE
  LEFT JOIN [Group_New_DB].[dbo].[SCRELATIONM1] SC on IM.INCIDENT_ID = SC.SOURCE
  where MEMBER_OF like 'Группа операторов СД'
  and IM.DDC_RESOLVE_TIME IS NOT NULL  and  (IM.OPEN_TIME >=  (@StartDate) and IM.OPEN_TIME < (@EndDate + 1))

  GROUP BY MG.ID


К сообщению приложен файл. Размер - 11Kb
25 май 17, 08:46    [20509994]     Ответить | Цитировать Сообщить модератору
 Re: Округление sql  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20484
Marin_1a
необходимо сделать округление процентов, но в итоге не выходит ровно 100

Это нормально.
3,3+3,3+3,4=10
ROUND(3,3)+ROUND(3,3)+ROUND(3,4)=3+3+3=9
25 май 17, 08:53    [20510010]     Ответить | Цитировать Сообщить модератору
 Re: Округление sql  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
Akina
Marin_1a
необходимо сделать округление процентов, но в итоге не выходит ровно 100

Это нормально.
3,3+3,3+3,4=10
ROUND(3,3)+ROUND(3,3)+ROUND(3,4)=3+3+3=9

значит итог может быть как 99,так и 101 % ?
25 май 17, 09:21    [20510119]     Ответить | Цитировать Сообщить модератору
 Re: Округление sql  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20484
Конечно. И на самом деле диапазон возможных "сумм" даже шире - зависит от количества слагаемых.

Корректировку обычно выполняют, отсортировав округлённые значения по убыванию отклонения точных в корректируемую сторону, и уменьшая/увеличивая на единицу необходимое количество значений. Но это лучше реализовывать при отображении на стороне клиента, а не в запросе.

Модератор: Тема перенесена из форума "MySQL".


Сообщение было отредактировано: 26 май 17, 23:45
25 май 17, 09:54    [20510283]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить