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

Откуда:
Сообщений: 40
Добрый день, такая задача
create table #temp (v1 varchar(10), cnt int)
insert into #temp values('1',0)
insert into #temp values('1',0)
insert into #temp values('2',0)
insert into #temp values('2',0)
insert into #temp values('3',0)
select * from #temp

Получается выборка вида
v1 cnt
1 0
1 0
2 0
2 0
3 0

теперь как сделать update чтобы в cnt попали данные сколько одинаковых строк по v1?
т.е. в строках с v1=1 должно стать в поле cnt=2, т.к. две строки с этим значением.
Должно получиться чтото типа этого

update #temp A set v1=(select count(*) from #temp B where A.v1=B.v1)

Кручу верчу, через from что-то не получается.
7 ноя 16, 16:47    [19866614]     Ответить | Цитировать Сообщить модератору
 Re: Как в update в таблице обратиться к себе самой.  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
FBoris
update #temp A set v1=(select count(*) from #temp B where A.v1=B.v1)

Кручу верчу, через from что-то не получается
В UPDATE алиасы могут объявляться только во FROMе.
UPDATE A
SET v1=(SELECT COUNT(*) FROM #temp B where A.v1=B.v1)
FROM #temp A;
7 ноя 16, 16:50    [19866640]     Ответить | Цитировать Сообщить модератору
 Re: Как в update в таблице обратиться к себе самой.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21101
Идеологически можно так:
update table t1, (select t2.v1, count(t2.*) cnt from table t2 group by t2.v1) t3
set t1.cnt = t3.cnt
where t1.v1 = t3.v1
7 ноя 16, 16:52    [19866652]     Ответить | Цитировать Сообщить модератору
 Re: Как в update в таблице обратиться к себе самой.  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
Akina
Идеологически можно так:
update table t1, (select t2.v1, count(t2.*) cnt from table t2 group by t2.v1) t3
set t1.cnt = t3.cnt
where t1.v1 = t3.v1
Это на каком сервере?
7 ноя 16, 16:59    [19866693]     Ответить | Цитировать Сообщить модератору
 Re: Как в update в таблице обратиться к себе самой.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8584
update t1 ...
from #t1 t1
inner join
(select count ) t2 on ...
7 ноя 16, 18:16    [19867014]     Ответить | Цитировать Сообщить модератору
 Re: Как в update в таблице обратиться к себе самой.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21101
iap
Это на каком сервере?

Какая разница? я же идею даю - какие таблицы использовать (UPDATE), что и чем обновлять (SET), какие условия накладывать (WHERE)... а конкретно этот текст без проблем съест, например, MySQL.
7 ноя 16, 19:33    [19867265]     Ответить | Цитировать Сообщить модератору
 Re: Как в update в таблице обратиться к себе самой.  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
with t as
(
 select v1, cnt, count(*) over (partition by v1) as c from #temp
)
update t
 set
  cnt = c;
7 ноя 16, 19:51    [19867312]     Ответить | Цитировать Сообщить модератору
 Re: Как в update в таблице обратиться к себе самой.  [new]
o-o
Guest
iap
Akina
Идеологически можно так:
update table t1, (select t2.v1, count(t2.*) cnt from table t2 group by t2.v1) t3
set t1.cnt = t3.cnt
where t1.v1 = t3.v1
Это на каком сервере?

на идеологически правильном
+
Картинка с другого сайта.
7 ноя 16, 21:54    [19867705]     Ответить | Цитировать Сообщить модератору
 Re: Как в update в таблице обратиться к себе самой.  [new]
FBoris
Member

Откуда:
Сообщений: 40
iap
FBoris
update #temp A set v1=(select count(*) from #temp B where A.v1=B.v1)

Кручу верчу, через from что-то не получается
В UPDATE алиасы могут объявляться только во FROMе.
UPDATE A
SET v1=(SELECT COUNT(*) FROM #temp B where A.v1=B.v1)
FROM #temp A;


Sql server 2000 у меня, спасибо огромное.
8 ноя 16, 08:14    [19868622]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить