SQL Server 2008 запрос с условием или делом? - PullRequest
1 голос
/ 07 июня 2011

вот мои данные:

liza
liza
liza
alex
alex
alex
liza

Я хотел бы обновить эту таблицу данными для каждого вхождения каждого имени, подобного этому:

liza    4
liza    4
liza    4
alex    3
alex    3
alex    3
liza    4

пока у меня есть:

update table set column2=count(name) group by name

Большое спасибо за вашу помощь

1 Ответ

5 голосов
/ 07 июня 2011
update T1 set
  Column2 = T2.C
from YourTable as T1
  inner join (
                select count(*) as C, Name
                from YourTable
                group by Name
             ) as T2  
    on T1.Name = T2.Name

Образец с табличной переменной

declare @YourTable table 
(
  Name varchar(10),
  Column2 int
)

insert into @YourTable (Name) values
('liza'),('liza'),('liza'),('alex'),('alex'),('alex'),('liza')

update T1 set
  Column2 = T2.C
from @YourTable as T1
  inner join (
                select count(*) as C, Name
                from @YourTable
                group by Name
             ) as T2  
    on T1.Name = T2.Name

Попробуй здесь. http://data.stackexchange.com/stackoverflow/q/102392/update-with-count

Вот еще один способ использования CTE и count(*) over().

declare @YourTable table 
(
  Name varchar(10),
  Column2 int
)

insert into @YourTable (Name) values
('liza'),('liza'),('liza'),('alex'),('alex'),('alex'),('liza')

;with cte as
(
  select Column2,
         count(*) over(partition by Name) as C
  from @YourTable        
)
update cte set
  Column2 = C

И этот запрос вы можете попробовать здесь. http://data.stackexchange.com/stackoverflow/q/102394/update-with-count-2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...