powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Задачка про newid()
3 сообщений из 3, страница 1 из 1
Задачка про newid()
    #39619134
rozen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Довольно давно не могу найти изящного решения для задачи, упрощённо сводящейся к следующей:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE [TestTable] (
	[Name] [nvarchar](10) NOT NULL,
	[ID] [uniqueidentifier] NULL
)
go
INSERT [dbo].[TestTable] ([Name]) VALUES (N'Alice')
INSERT [dbo].[TestTable] ([Name]) VALUES (N'Bob')
INSERT [dbo].[TestTable] ([Name]) VALUES (N'Alice')
INSERT [dbo].[TestTable] ([Name]) VALUES (N'John')
INSERT [dbo].[TestTable] ([Name]) VALUES (N'Jane')
INSERT [dbo].[TestTable] ([Name]) VALUES (N'Jane')
GO



Хочется написать ОДНУ команду update, чтобы создать и присвоить значения в поле [ID] так, чтобы они были одинаковыми для строк с одинаковыми значениями в поле [Name]

Использовать временную таблицу мне кажется неизящным.
Пока мне удалось найти только такой вариант из 2 команд:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
update TestTable set ID = newid();

;with T as (
	select Name, ID, row_number() over (partition by Name order by rand()) as _rn
	from TestTable
)
update T1 set ID = T2.ID 
from T T1 join T T2 on T1.Name = T2.Name and T2._rn = 1 and T1._rn > 1;
...
Рейтинг: 0 / 0
Задачка про newid()
    #39619135
step_ks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Задачка про newid()
    #39619141
rozen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
step_ks, спасибо за наводку, нашел в обеих темах намёк на идеальное (с моей точки зрения) решение.
Код: sql
1.
2.
3.
4.
5.
;with T as (
	select *, first_value(newid()) over (partition by [Name] order by rand()) as new_id
	from TestTable
)
update T set ID = new_id
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Задачка про newid()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]