Назначьте номера групп для уникальных комбинаций нескольких столбцов - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть таблица T1, которая имеет пару столбцов, скажем, 10 столбцов.Я хотел бы сгруппировать данные по значениям 5 столбцов, скажем, от param1 до param5 и назначить group # этим уникальным строкам.Затем я хотел бы добавить новый столбец в исходную таблицу T1 и добавить соответствующий номер группы в каждую строку.

Вот шаги, которые я предпринял:

Шаг 1 - Сохранение уникальных строк T1 в таблице temp2 таблицы и назначение номеров групп

IF OBJECT_ID('temp2', 'U') IS NOT NULL DROP TABLE temp2
select param1, param2, param3, param4, param5, 
ROW_NUMBER() OVER(ORDER BY min(Row#) ASC) AS Group#  
into temp2
from T1 
group by param1, param2, param3, param4, param5

Шаг 2 - Созданиекопия исходной таблицы в temp3 с дополнительной группой столбцов # из таблицы temp2

IF OBJECT_ID('temp3', 'U') IS NOT NULL DROP TABLE temp3
select t1.*, t2.Group# 
into temp3
from T1 as t1 Left JOIN temp2 as t2 
ON (
   ((t1.param1=t2.param1) OR (ISNULL(t1.param1,t2.param1) IS NULL)) AND 
   ((t1.param2=t2.param2) OR (ISNULL(t1.param2,t2.param2) IS NULL)) AND
   ((t1.param3=t2.param3) OR (ISNULL(t1.param3,t2.param3) IS NULL)) AND
   ((t1.param4=t2.param4) OR (ISNULL(t1.param4,t2.param4) IS NULL)) AND
   ((t1.param5=t2.param5) OR (ISNULL(t1.param5,t2.param5) IS NULL)) 
   )

Шаг 3 - Заменить T1 на temp3

Код работает нормально, но для его улучшения у меня естьу меня на уме следующие вопросы:

Q1 - Является ли код на шаге 1 лучшим способом присвоения номера группы уникальным строкам?

Q2 - На шаге 2 существует ли векторизованный способсопоставить строки таблицы 2 с таблицей 1, когда мы хотим сравнить несколько параметров?

Q3 - На шаге 2 я бы хотел сопоставить два значения, если оба одинаковы или оба равны NULL.Является ли утверждение, что я имею лучший способ сделать это?

Q4 - Могу ли я пропустить шаг 3 и напрямую обновить исходную таблицу на шаге 2?

Пожалуйста, поделитесь своими мыслями, если есть еще способы улучшить этот код.

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