Try to use
ROUND()[
^] function.
Example:
SELECT 1.23 [Value], ROUND(1.23,1) AS [RndValue]
UNION ALL
SELECT 1.24 [Value], ROUND(1.24,1) AS [RndValue]
UNION ALL
SELECT 1.25 [Value], ROUND(1.25,1) AS [RndValue]
UNION ALL
SELECT 1.26 [Value], ROUND(1.26,1) AS [RndValue]
UNION ALL
SELECT 1.27 [Value], ROUND(1.27,1) AS [RndValue]
UNION ALL
SELECT 1.28 [Value], ROUND(1.28,1) AS [RndValue]
UNION ALL
SELECT 1.29 [Value], ROUND(1.29,1) AS [RndValue]
UNION ALL
SELECT 1.30 [Value], ROUND(1.30,1) AS [RndValue]
UNION ALL
SELECT 1.31 [Value], ROUND(1.31,1) AS [RndValue]
Returned values:
Value | RndValues |
---|
1.23 | 1.20 |
1.24 | 1.20 |
1.25 | 1.30 |
1.26 | 1.30 |
1.27 | 1.30 |
1.28 | 1.30 |
1.29 | 1.30 |
1.30 | 1.30 |
1.31 | 1.30 |
You can "play" with
modulo[
^] too.
SELECT 1.23 [Value], ROUND(1.23,0) AS [RndValue], CONVERT(INT, 1.23 * 10 % 10) AS [Modulo]
UNION ALL
SELECT 1.24 [Value], ROUND(1.24,0) AS [RndValue], CONVERT(INT, 1.24 * 10 % 10) AS [Modulo]
UNION ALL
SELECT 1.25 [Value], ROUND(1.25,0) AS [RndValue], CONVERT(INT, 1.25 * 10 % 10) AS [Modulo]
UNION ALL
SELECT 1.26 [Value], ROUND(1.26,0) AS [RndValue], CONVERT(INT, 1.26 * 10 % 10) AS [Modulo]
UNION ALL
SELECT 1.27 [Value], ROUND(1.27,0) AS [RndValue], CONVERT(INT, 1.27 * 10 % 10) AS [Modulo]
UNION ALL
SELECT 1.28 [Value], ROUND(1.28,0) AS [RndValue], CONVERT(INT, 1.28 * 10 % 10) AS [Modulo]
UNION ALL
SELECT 1.29 [Value], ROUND(1.29,0) AS [RndValue], CONVERT(INT, 1.29 * 10 % 10) AS [Modulo]
UNION ALL
SELECT 1.30 [Value], ROUND(1.30,0) AS [RndValue], CONVERT(INT, 1.30 * 10 % 10) AS [Modulo]
UNION ALL
SELECT 1.31 [Value], ROUND(1.31,0) AS [RndValue], CONVERT(INT, 1.31 * 10 % 10) AS [Modulo]
Value | RndValues | Modulo |
---|
1.23 | 1.00 | 2 |
1.24 | 1.00 | 2 |
1.25 | 1.00 | 2 |
1.26 | 1.00 | 2 |
1.27 | 1.00 | 2 |
1.28 | 1.00 | 2 |
1.29 | 1.00 | 3 |
1.30 | 1.00 | 3 |
1.31 | 1.00 | 3 |
... or ...
use
CASE[
^] expression ;)
USE A_TEST;
DECLARE @sql1 NVARCHAR(1000)
DECLARE @sql2 NVARCHAR(2000)
SET @sql1 = 'SELECT [GradeRng] = ' +
'CASE ' +
' WHEN [Grade] >=1 AND [Grade] <1.3 THEN ''1 to 1.29'' ' +
' WHEN [Grade] >=1.3 AND [Grade] <1.7 THEN ''1.3 to 1.69'' ' +
' WHEN [Grade] >=1.7 AND [Grade] <=2 THEN ''1.7 to 2'' ' +
'END, [Weight] ' +
'FROM Table_2 '
SET @sql2 = 'SELECT DT.[GradeRng], SUM(DT.[Weight]) AS [SumOfWeight] ' +
'FROM (' + @sql1 + ') AS DT ' +
'GROUP BY DT.[GradeRng], DT.[Weight] ' +
'ORDER BY DT.[GradeRng], DT.[Weight] '
EXEC (@sql2)
results:
GradeRng | SumOfWeight |
---|
1 to 1.29 | 500 |
1.3 to 1.69 | 1000 |
1.7 to 2 | 1500 |