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

Откуда:
Сообщений: 4
Как в sql реализовать такое?
есть таблица:
Иванов Николай
Иванов Иван
Иванов Степан
Иванов Александр
Петров Василий
Петров Кирилл
Сидоров Алексей
Сидоров Иван
Сидоров Степан

Нужно в нее же добавить столбец, в котором напротив каждого будет указано количество однофамильцев:
Иванов Николай 4
Иванов Иван 4
Иванов Степан 4
Иванов Александр 4
Петров Василий 2
Петров Кирилл 2
Сидоров Алексей 3
Сидоров Иван 3
Сидоров Степан 3
5 авг 16, 15:49    [19506340]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количество вхождений  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
group by Фамилия + count ()
5 авг 16, 15:50    [19506350]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количество вхождений  [new]
azylex
Member

Откуда:
Сообщений: 4
Гавриленко Сергей Алексеевич,

в том то и дело, что группировка не нужна, надо оставить все исходные строки
5 авг 16, 15:57    [19506384]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количество вхождений  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
cross apply + подзапрос с count по фамилии
5 авг 16, 15:58    [19506389]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количество вхождений  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
count(*) over (partition by Фамилия)
5 авг 16, 15:58    [19506392]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количество вхождений  [new]
azylex
Member

Откуда:
Сообщений: 4
Гавриленко Сергей Алексеевич,

а можно пример? а то я никогда таким не пользовался
5 авг 16, 15:59    [19506399]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количество вхождений  [new]
azylex
Member

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

Спасибо! Получилось!
5 авг 16, 16:01    [19506413]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количество вхождений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
по старинке:

declare @t table (fullname varchar(50), f varchar(40), n varchar(20), i int)

insert into @t (fullname)
values
('Иванов Николай'),
('Иванов Иван'),
('Иванов Степан'),
('Иванов Александр'),
('Петров Василий'),
('Петров Кирилл'),
('Сидоров Алексей'),
('Сидоров Иван'),
('Сидоров Степан')

update t
set t.f = a.lastname, t.n = a.firstname
from @t t inner join 
(select fullname, left(fullname, CHARINDEX(' ',fullname, 0)-1) as [lastname], SUBSTRING(fullname,  CHARINDEX(' ',fullname, 0)+1, len(fullname)) as [firstname] from @t) a
on t.fullname = a.fullname

update t
set t.i = a.count
from @t t inner join (select count(*) as [count], t.f  from @t t group by t.f) a on t.f = a.f

select * from @t
5 авг 16, 16:01    [19506417]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить