С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/47: Рейтинг темы: голосов - 47, средняя оценка - 4.74
3 / 3 / 4
Регистрация: 27.07.2015
Сообщений: 28

Нумерация повторяющихся значений в строке

04.12.2015, 09:42. Показов 9606. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. В sql совсем новичок. Кто-нибудь сможет обьяснить, как пронумеровать повторяющиеся значения в столбце Name определенным индексом в столбец CID?
Имеется таблица такого типа, нужно чтобы автоматом получался такого рода процесс:
И будет ли это потом работать, если в таблицу будут добавляться новые записи с одинаковыми именами?

ID Name CID -> CID
1 Лаваш NULL --> 1
2 Лаваш NULL --> 1
3 Бублик NULL --> 2
4 Пицца NULL --> 3
5 Пицца NULL --> 3
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.12.2015, 09:42
Ответы с готовыми решениями:

Отсеивание повторяющихся значений
Привет всем! Пишу программу на VB.NET. Подскажите, пожалуйста, есть ли какая-то команда SQL-запроса, которая бы отсеивала...

Запрет вывода повторяющихся значений
В упрощенном виде есть такая вещь: 2 таблицы Предметы и Семестры: Предметы Id предмета Название предмета Семестры Id...

Сумма значений повторяющихся имен в БД
Доброго времени суток! Есть таблица: |_Имя_|_Значение1_|_Значение2_|_Значение3_| |------+------------+------------+-------------| |...

4
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
04.12.2015, 13:49
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE @T TABLE(ID INT,Name VARCHAR(100),CID INT);
INSERT @T(ID,Name,CID)
VALUES
  (1,'Лаваш',NULL)
 ,(2,'Лаваш',NULL)
 ,(3,'Бублик',NULL)
 ,(4,'Пицца',NULL)
 ,(5,'Пицца',NULL);
 
WITH
 CTE AS(SELECT N=ROW_NUMBER()OVER(ORDER BY ID)-ROW_NUMBER()OVER(PARTITION BY Name ORDER BY ID),* FROM @T)
,T AS(SELECT V=DENSE_RANK()OVER(ORDER BY N),* FROM CTE)
UPDATE T SET CID=V;
 
SELECT * FROM @T ORDER BY ID;
Добавлено через 3 часа 3 минуты
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE @T TABLE(ID INT,Name VARCHAR(100),CID INT);
INSERT @T(ID,Name,CID)
VALUES
  (1,'Лаваш',NULL)
 ,(2,'Лаваш',NULL)
 ,(3,'Бублик',NULL)
 ,(4,'Пицца',NULL)
 ,(5,'Пицца',NULL);
 
WITH
 CTE AS(SELECT N=MIN(ID)OVER(PARTITION BY Name),* FROM @T)
,T AS(SELECT V=DENSE_RANK()OVER(ORDER BY N),* FROM CTE)
UPDATE T SET CID=V;
 
SELECT * FROM @T ORDER BY ID;
Поведение этих двух запросов разное: если одно и тоже Name следует не подряд относительно ID,
то первый UPDATE присвоит им разный CID до и после ID, где нарушается непрерывность последовательности.
Второй же присвоит одно и то же значение всем совпадающим Name в порядке возрастания ID
1
3 / 3 / 4
Регистрация: 27.07.2015
Сообщений: 28
04.12.2015, 13:59  [ТС]
iap, т.е. со включенным "Identity specification" - "Yes", для столбца - ID, подойдет второй вариант? А что делать, если повторяющихся значений в районе 100,000 (у каждого есть свои уникальные столбцы со свойствами)? Не вписывать же каждое?
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
04.12.2015, 14:49
Для данных, которые показаны в первом посте, работает всё.
Другое дело, что осталось неизвестным, а как быть в некоторых других случаях,
когда, например, 'Лаваш' будет ещё и с ID=6? Вы же не описали всю задачу.

При чём здесь какое-то "Identity specification", я не понимаю.
Давно не играю в кубики и выполняю исключительно написанные собственноручно скроипты.
Играет роль не свойство IDENTITY у поля ID, а какие данные реально находятся в таблице,
и что вы планируете с ними делать.
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
04.12.2015, 23:56
вот так еще можно, план попроще мальца выходит
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE @T TABLE(ID INT,Name VARCHAR(100),CID INT);
INSERT @T(ID,Name,CID)
VALUES
  (1,'Лаваш',NULL)
 ,(2,'Лаваш',NULL)
 ,(3,'Бублик',NULL)
 ,(4,'Пицца',NULL)
 ,(5,'Пицца',NULL)
 ,(6,'Пицца', 1);
 
UPDATE @T
SET cid = tbl.NUM
FROM @T AS t
JOIN
  (SELECT name, ROW_NUMBER() over (ORDER BY name) AS NUM  FROM @T GROUP BY name) AS tbl 
ON tbl.Name = t.Name
 
SELECT * FROM @T ORDER BY ID;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.12.2015, 23:56
Помогаю со студенческими работами здесь

Пример повторяющихся групп значений атрибутов
Не понимаю что значит повторяющиеся группы значений атрибутов таблицы. Нашел в интернете определение: Повторяющейся группой называется...

Нумерация одинаковых значений в отчете
Подскажите как пронумеровать в отчете только одинаковые значения по колонке. С помощью группировки не вариант так как присутствует...

Поиск пустых ячеек. Поиск ссылки на оригинальных значений для повторяющихся значений
Ребят, всем привет. В связи с тем, что firefox прекращает поддержку функции группы вкладок, пришлось их перебирать. И начали возникать...

Нумерация и формат значений XML, XSLT?
Нумерация и формат значений XML, XSLT? Иметься такой XML файл необходимо вывести и пронумеровать все положительные StockQuantity...

Вывод повторяющихся значений
Доброго времени суток. Имеется массив Student хранящий информацию о имени. фамилии. росте... Student : array of Tpeople; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru