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

Откуда: Львов, Украина
Сообщений: 38
Доброго времени суток!!!

Имеем кпримеру такую таблицу

create table users
(First_Name nvarchar(35),
Middle_Name nvarchar(35),
Last_Name nvarchar(35))

и такие значения в ней

insert into users
values('Иван', 'Степанович', 'Степанов')
insert into users
values('Роман', 'Петрович', 'Сидоров')
insert into users
values('Степан', 'Владимирович', 'Петров')
insert into users
values('Степан', 'Петрович', 'Иванов')
insert into users
values('Владимир', 'Дмитриевич', 'Селезнёв')
insert into users
values('Степан', 'Романович', 'Степенов')
insert into users
values('Роман', 'Романович', 'Петров')
insert into users
values('Иван', 'Петрович', 'Иванов')

Нужно человеку, имя которого встречаеться в базе 2 раза поменять фамилию на фамилию его тёски.
Тоесть для этих людей
select *
from users
where First_Name in(
select First_Name
from users
group by First_Name
having count(*) = 2
)



Иван	Петрович	Иванов
Иван	Степанович	Степанов
Роман	Петрович	Сидоров
Роман	Романович	Петров



сделать такой результат

select *
from users
where First_Name in(
select First_Name
from users
group by First_Name
having count(*) = 2
)



Иван	Петрович	Степанов
Иван	Степанович	Иванов
Роман	Петрович	Петров
Роман	Романович	Сидоров



Заранее спасибо.
24 сен 09, 15:38    [7703962]     Ответить | Цитировать Сообщить модератору
 Re: Поменять значение  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а если тезок будет 3-е с разными фамилиями ,по какому принцыпу выбирать фамилию на котроую менять ???????

вася пупкин
вася петров
вася столяров

какая в итоге фамилия будет увсех вась ???? и самое главное по какому приципу выбрать ?
-------------------------------------
Jedem Das Seine
24 сен 09, 15:41    [7703987]     Ответить | Цитировать Сообщить модератору
 Re: Поменять значение  [new]
SoMaL
Member

Откуда: Львов, Украина
Сообщений: 38
Maxx,

Maxx
а если тезок будет 3-е с разными фамилиями ,по какому принцыпу выбирать фамилию на котроую менять ???????


Условие говорит
SoMaL
имя которого встречаеться в базе 2 раза


там запрос написан
24 сен 09, 15:45    [7704020]     Ответить | Цитировать Сообщить модератору
 Re: Поменять значение  [new]
iljy
Member

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

странная задача, ну да дело ваше.

with Twins(f1,f2,f3) as
(
	select 1,2,3
	union all select 1,3,5
	union all select 2,8,9
	union all select 2,7,6
)
select f1,f2,f3Other from
(
	select * , max(case rn when nn then f3 end) over(partition by f1,nn) f3other
	from
		(select row_number() over(partition by f1 order by f2) rn, * from Twins) t1 cross join
		(select 1 nn union all select 2) t2
) t
where rn != nn

вот пример, меняем значение 3го поля у пар с равными 1ми полями.
24 сен 09, 15:59    [7704128]     Ответить | Цитировать Сообщить модератору
 Re: Поменять значение  [new]
deleted_2ks3ax
Member [скрыт]

Откуда:
Сообщений: 109
Решение "в лоб". Работать корректно будет только на двух тесках.
update u1
set    u1.last_name = u2.last_name
from   #usr u1
join   #usr u2 on u2.first_name = u1.first_name
              and u2.middle_name <> u1.middle_name

----
Think twice before you press F5.
24 сен 09, 16:04    [7704171]     Ответить | Цитировать Сообщить модератору
 Re: Поменять значение  [new]
SoMaL
Member

Откуда: Львов, Украина
Сообщений: 38
iljy,

Спасибо, но пример годен только для чисел
24 сен 09, 16:14    [7704254]     Ответить | Цитировать Сообщить модератору
 Re: Поменять значение  [new]
iljy
Member

Откуда:
Сообщений: 8711
SoMaL
iljy,

Спасибо, но пример годен только для чисел



?????

with Twins(f1,f2,f3) as
(
select 'Иван', 'Петрович', 'Иванов'
union all select 'Иван', 'Степанович', 'Степанов'
union all select 'Роман', 'Петрович', 'Сидоров'
union all select 'Роман', 'Романович', 'Петров'
)
select f1,f2,f3Other from
(
	select * , max(case rn when nn then f3 end) over(partition by f1,nn) f3other
	from
		(select row_number() over(partition by f1 order by f2) rn, * from Twins) t1 cross join
		(select 1 nn union all select 2) t2
) t
where rn != nn

тут на числа вообще никаких завязок нет!
24 сен 09, 16:17    [7704282]     Ответить | Цитировать Сообщить модератору
 Re: Поменять значение  [new]
deleted_2ks3ax
Member [скрыт]

Откуда:
Сообщений: 109
А зачем тут огород аналитич. функций?

----
Think twice before you press F5.
24 сен 09, 16:20    [7704313]     Ответить | Цитировать Сообщить модератору
 Re: Поменять значение  [new]
SoMaL
Member

Откуда: Львов, Украина
Сообщений: 38
Ap0k,

Да Вы правы...
Ко, когда дописать к вашему запросу

where First_Name in(
select First_Name
from users
group by First_Name
having count(*) = 2
)

то всё рабоет...

Для меня тему можно закрыть.

всем спасибо за помощь
24 сен 09, 16:22    [7704322]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить