Установите два знака после запятой после функции AVG внутри PIVOT

#sql #sql-server #string #pivot #average

#sql #sql-сервер #строка #pivot #среднее

Вопрос:

 SELECT 
   Student, [English], [Mathematics], [Science], [Programming], [History]
FROM
(
   SELECT  
       Grades, Subject, Student
   FROM    
       Grade_Report
) AS sourcetable
PIVOT
(
   AVG(Grades)
   FOR [Subject] IN ([English], [Mathematics], [Science], [Programming], [History])
) AS pivoted
  

Вывод продолжает составлять 95.000000

Я попытался использовать AVG(ПРИВЕДЕНИЕ (оценки КАК десятичные (10,2) ) ) внутри pivot, и он продолжает возвращать синтаксическую ошибку о ( .

Пробовал использовать ПРИВЕДЕНИЕ КАК ДЕСЯТИЧНОЕ внутри подзапроса FROM, но он просто продолжает выводить тот же вывод 00000. ПРИВЕДЕНИЕ С плавающей точкой работает, но мне нужны два знака после запятой, и это устраняет конечные значения 0

Использование ROUND(AVG) внутри pivot приводит к нераспознанному агрегату.

Ответ №1:

Вам нужны две десятичные позиции для всех ваших чисел, даже если эти цифры не являются значащими. Это читается как проблема с форматированием.

Я бы рекомендовал format() :

 SELECT Student, 
    format([English],     '0.00') as [English], 
    format([Mathematics], '0.00') as [Mathematics],
    format([Science],     '0.00') as [Science],
    format([Programming], '0.00') as [Programming],
    format([History],     '0.00') as [History]
FROM ...
  

Обратите внимание, что это превращает числа в строки — похоже, это то, что вы на самом деле спрашиваете здесь.

Комментарии:

1. Спасибо, это сработало! Я никогда не знал, что можно коснуться этих значений поворота. Теперь я попробовал использовать CAST для них, и это тоже работает, что вы рекомендуете?