T-SQL / SQL Server: округление после преобразования (десятичное) SqlCommand - PullRequest
0 голосов
/ 18 января 2019

Я хочу нормализовать свой столбец SQL Server перед добавлением в datagridview, я сделал это в своем запросе SQL. Но у меня есть проблема.

Если значение полностью разделено (например, 100/100 = 1), я не хочу видеть это значение как 1.00000000000000. И если значение не делится полностью (например, 3/7 = 0,42857142857), я хочу округлить это значение до двух цифр после округления (0,43).

Это мой код:

string q = "SELECT column1, column2, ((CONVERT(DECIMAL(18, 2), column3) / (SELECT MAX(column3) FROM tablename)) * 100) AS normalizedColumn3 
            FROM tablename .......;

Мне нужно нормализовать столбец 3, его значения перед нормализацией находятся в диапазоне от 1 до 2000000. После нормализации значения будут в диапазоне от 0,01 до 100.

Нормализовать формулу:

column 3 = ((column 3 / maximum column 3) * 100)

Спасибо за ответы ...

Ответы [ 2 ]

0 голосов
/ 18 января 2019

У вас будет небольшая проблема потери данных, если вы захотите использовать только два знака после запятой.Вам понадобится не менее 5 десятичных знаков для значений от 1 до 2 000 000

Пример

Declare @YourTable table (Col3 float)
Insert into @YourTable values 
 (1),(1536),(1000000),(2000000)

Select A.*
      ,NewVal = convert(decimal(10,2), (Col3*100.0) /  ( Select max(Col3) from @YourTable)  )
 From  @YourTable A

Возвращает

Col3     NewVal
1        0.00     -- At decimal(10,5) you would see 0.00005
1536     0.08
1000000  50.00
2000000  100.00
0 голосов
/ 18 января 2019

Я считаю, что вы можете использовать ROUND ( numeric_expression , length [ ,function ] ) или SELECT ROUND(CAST (# AS decimal (#,#)),#); для округления десятичной дроби.

Подробнее об этом: https://docs.microsoft.com/en-us/sql/t-sql/functions/round-transact-sql?view=sql-server-2017

...