Как преобразовать деление двух целочисленных значений в десятичное с использованием T-SQL для базы данных iSeries AS / 400? - PullRequest
1 голос
/ 07 октября 2011

Предполагая следующий запрос:

SELECT
    ID,
    COUNT(1) AS NumRecords,
    SUM(Quantity) AS TotalQty
    SUM(Quantity)/COUNT(1) AS Avg
FROM        SOME_TABLE
GROUP BY    ID

Прямо сейчас он возвращает:

ID    NumRecords    TotalQty    Avg
1     15            6           2

Я хочу, чтобы он возвращал десятичное значение со шкалой 2 для Avg (т.е."2.5").

Я пытался CAST вычислить как DECIMAL, NUMERIC, FLOAT и VARCHAR, но он всегда возвращает INTEGER.

Ответы [ 2 ]

6 голосов
/ 07 октября 2011

Вам необходимо привести данные к расчету, а не результат. Также по какой причине вы не используете функцию AVG?

AVG(CAST(Quantity as decimal(10,2)))
5 голосов
/ 18 декабря 2013

Альтернативное решение - неявное приведение. Я обнаружил, что SQL намного чище. Точность будет определяться количеством конечных нулей, используемых при умножении на 1.

AVG(Quantity * 1.00)   //x.xx
AVG(Quantity * 1.0000) //x.xxxx
...