Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Заполнить отсутствующие значения средними  [new]
SandraSidorova
Member

Откуда: Пермь
Сообщений: 60
Здравствуйте!
Есть таблица и в колонке некоторые значения пустые. Нужно с помощью запроса заполнить пустые средними значениями.
  create table [srez] (f1  int not null , f2  float null);
 insert into  [srez] values (1, 241.8)
 insert into  [srez] values (2, 239.5667)
 insert into  [srez] values (3, null)
 insert into  [srez] values (4, null)
 insert into  [srez] values (5, null)
 insert into  [srez] values (6, 239.2167)
 insert into  [srez] values (7, null)
 insert into  [srez] values (8, 239.0547)
 insert into  [srez] values (9, null)
 insert into  [srez] values (10, 240.3447)
 insert into  [srez] values (11, 241.8)
 insert into  [srez] values (12, null)
 insert into  [srez] values (13, null)
 insert into  [srez] values (14, 238.9107)
 insert into  [srez] values (15, null)
 insert into  [srez] values (16, null)
 insert into  [srez] values (17, null)
 insert into  [srez] values (18, 241.8)


К сообщению приложен файл. Размер - 77Kb
9 авг 17, 15:28    [20711127]     Ответить | Цитировать Сообщить модератору
 Re: Заполнить отсутствующие значения средними  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
SandraSidorova,

эммм средние прям с учётом новых? какие вообще смыслы вкладываются в это...
9 авг 17, 16:00    [20711256]     Ответить | Цитировать Сообщить модератору
 Re: Заполнить отсутствующие значения средними  [new]
vborets
Member

Откуда:
Сообщений: 164
SandraSidorova,

Так в чём проблема?

Сами пытались написать? Покажите...
9 авг 17, 16:01    [20711260]     Ответить | Цитировать Сообщить модератору
 Re: Заполнить отсутствующие значения средними  [new]
vborets
Member

Откуда:
Сообщений: 164
TaPaK
эммм средние прям с учётом новых? какие вообще смыслы вкладываются в это...


новые средние не влияют на среднее :-)
9 авг 17, 17:36    [20711572]     Ответить | Цитировать Сообщить модератору
 Re: Заполнить отсутствующие значения средними  [new]
iiyama
Member

Откуда:
Сообщений: 642
SandraSidorova,
COALESCE(f2,avg(f2) over())
9 авг 17, 18:02    [20711660]     Ответить | Цитировать Сообщить модератору
 Re: Заполнить отсутствующие значения средними  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 774
vborets
TaPaK
эммм средние прям с учётом новых? какие вообще смыслы вкладываются в это...


новые средние не влияют на среднее :-)


Msg 157, Level 15, State 1, Line 1
An aggregate may not appear in the set list of an UPDATE statement.


Похоже, надо делать цикликом...
9 авг 17, 18:09    [20711679]     Ответить | Цитировать Сообщить модератору
 Re: Заполнить отсутствующие значения средними  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36696
Шыфл
Похоже, надо делать цикликом...

 ; with a as (
     select
        a.f1
        , f2 = coalesce ( a.f2, avg ( a.f2 ) over() )
     from   @s a
)
update s set
    s.f2 = a.f2
from        @s s
inner join  a       on  s.f1 = a.f1
9 авг 17, 18:14    [20711689]     Ответить | Цитировать Сообщить модератору
 Re: Заполнить отсутствующие значения средними  [new]
SandraSidorova
Member

Откуда: Пермь
Сообщений: 60
Здравствуйте! Всем большое спасибо.
Задача решена

alter table srez add f2_2 float
alter table srez add f2_3 float

update srez
set f2_2 = f2

update srez
set f2_3 = f2



declare @a int
select @a=COUNT(f1) from srez where f2_2 is null
while @a >=0
begin
print @a
update srez
set f2_2 = ttt.f2_2 from srez join srez as ttt on srez.f1+1=ttt.f1 where srez.f2_2 is null
set @a=@a-1
end


select * from srez

update srez
set f2_3 = (ttt.f2_3+srez.f2_2)/2 from srez join srez as ttt on srez.f1-1=ttt.f1 where srez.f2_3 is null

declare @a int
select @a=COUNT(f1) from srez where f2_3 is null
while @a >=0
begin
print @a
update srez
set f2_3 = (ttt.f2_3+srez.f2_2)/2 from srez join srez as ttt on srez.f1-1=ttt.f1 where srez.f2_3 is null
set @a=@a-1
end

update srez
set f2=f2_3  



alter table srez drop column f2_3
alter table srez drop column f2_2
10 авг 17, 09:51    [20712673]     Ответить | Цитировать Сообщить модератору
 Re: Заполнить отсутствующие значения средними  [new]
iii2
Member

Откуда:
Сообщений: 202
Гавриленко Сергей Алексеевич, ну... средним это не интересно!
Вот средним между верхним и нижним не NULL значениями - это было б интереснее.

Интересно, есть способ без подзапросов, вычисляющих эти самые "предшествующий не NULL", "последующий не NULL", одними оконными функциями или чем то подобным?
10 авг 17, 10:11    [20712754]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить