#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 для них, и это тоже работает, что вы рекомендуете?