#sql #sql-server #sql-server-2008
#sql #sql-server #sql-сервер-2008
Вопрос:
У меня есть следующая таблица
Data Data1 Data2 YTD
-------------------------
1 2 3
2 3 4
3 3 6
В YTD
столбце я должен усреднить данные по строкам. Я могу использовать среднее значение по столбцам, но не уверен, как усреднить по строкам.
Ищем приведенные ниже результаты и используем SQL Server 2008
Data Data1 Data2 YTD
---------------------------------
1 2 3 2 (Average)
2 3 4 3
3 null 6 4.5
Комментарии:
1. Конструктивная обратная связь: Я отклонил это за (а) постоянное добавление болтливых материалов и, пожалуйста, остановите меня, умоляя, несмотря на то, что это было удалено из ваших предыдущих сообщений, и (б) не прилагая усилий, чтобы попробовать какой-нибудь код, прежде чем задавать вопрос.
Ответ №1:
Я думаю, cross apply
это самый простой метод:
select t.*, v.avg_data
from t cross apply
(select avg(v.data) as avg_data
from (values (t.data), (t.data1), (t.data2)) v(data)
) v;
Используйте case
выражения, вы также можете выразить это как:
select t.*,
( (coalesce(t.data, 0) (t.data1, 0) coalesce(t.data2, 0)) /
nullif( (case when t.data is not null then 1 else 0 end)
(case when t.dat1 is not null then 1 else 0 end)
(case when t.dat2 is not null then 1 else 0 end), 0
)
) as avg_data;
Однако эта формулировка является беспорядочной и подвержена опечаткам.
Комментарии:
1. Лол Гордон спешит на помощь.. Чувак, когда ты работаешь … Кажется, ты всегда просто помогаешь другим.
2. @user1221989 . . . Я пишу документ. Это дает мне прекрасную возможность сделать паузу, чтобы подумать.
3. Гордон вместо того, чтобы получать его в виде инструкции select, как я могу обновить столбец основной таблицы с начала года средними значениями.
4. @user1221989 . . . Это другой вопрос, и его следует задать как новый.