istudent Ответов: 1

Как получить значение, наиболее близкое к после деления двух целых чисел в SQL server


если значение равно 75,5 или больше, я хочу вернуть 76, а меньше 75,5-75.

Вот как выглядит мой запрос

SELECT DISTRICT, 
COUNT(DISTRICT) RegionDistrict,
CEILING(SUM(CONVERT(int,[turnoverSM (%)]))/COUNT(DISTRICT)) as SM,
CEILING(SUM(CONVERT(int,[turnoverASM (%)]))/COUNT(DISTRICT)) as ASM
FROM HRStaffTable WHERE REGION = 40 AND Created_Date = CONVERT(DATE, GetDate()) GROUP BY DISTRICT


Что я уже пробовал:

В результате выберите потолок(1060/14)

Ziee-M

Вы можете создать свою собственную функцию, которая округляется с помощью вашего собственного правила

1 Ответов

Рейтинг:
4

Richard Deeming

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

ROUND(CONVERT(real, SUM([turnoverSM (%)])) / COUNT(DISTRICT), 0)

Раунд (Transact-SQL) | Microsoft Docs[^]

Кроме того, в случае, если вы еще не поняли этого, это чрезвычайно плохая идея для имен таблиц или столбцов, содержащих пробелы или другие специальные символы. Если это возможно, вам следует изменить структуру базы данных, переименовав столбцы таким образом, чтобы они использовали только буквенно-цифровые символы.


istudent

Я протестировал Select ROUND((1060/14),0) в результате он все еще возвращает 75

Richard Deeming

Потому что оба 1060 и 14 это целые числа!

Попробуй: ROUND(1060. / 14, 0) - обратите внимание на "." в конце первого числа.

istudent

Но у меня нет возможности добавить десятичную дробь в мое поле в таблице. Как мне этого добиться? если вы проверили столбец SUM([turnoverSM (%)]) , то он равен 1060

Richard Deeming

Хорошо, я думал, что это тип с плавающей запятой, так как вы явно преобразуете его в int.

Попробуйте преобразовать его в double вместо:

ROUND(CONVERT(double, SUM([turnoverSM (%)])) / COUNT(DISTRICT), 0)

istudent

Я конвертирую его в десятичную дробь, он возвращает 76.000000, это сработало, но я думаю, что должен просто вернуть сумму и сделать расчет в коде.

подобный этому.

Dim CriticalIndicator = "1060"
Dim District storecount = "14"

Dim ci As Int32 = конвертировать.ToInt32(Критический Индикатор)
Dim dc As Int32 = преобразовать.ToInt32(districtstorecount)
Dim HelloPercentage = (ci / dc)


Приставка.WriteLine(Строка.Формат("{0:N0}", HelloPercentage))

istudent

превращение в настоящее, сработало. Большое вам спасибо, сэр.

Maciej Los

5ed!