У меня есть набор данных, в котором есть некоторый столбец, в котором значения совпадают, но остальные значения столбца не совпадают. Мне нужно удалить дубликаты, где подкатегория более низкого уровня (уровень 2, уровень 3 и уровень 4) «НЕТ НЕДЕЙСТВИТЕЛЬНО», но соответствующий «дубликат партнера» (сгруппированный по [ID подкатегории уровня 1], [Категория продукта] и [Имя продукта] ) имеет ту же подкатегорию более низкого уровня - "IS NULL". В приведенной ниже таблице мне нужно удалить ID 2, 4, 6 и 9 (см. Выделено красным шрифтом).
Я пробовал функции Dense_Rank, Rank и Row_Number с Partition By, но это не дало мне нежелательный вывод. Может быть, мне нужно использовать их комбинацию ...
Например: RowID 1 и 2 являются дубликатами [Категория продукта], [Название продукта], [Категория уровня 1]. «Категория уровня 1» является просто идентификатором «Категория продукта». Необходимо удалить RowID 2, потому что соответствующему дублирующему партнеру RowID 1 не назначен «Категория уровня 3», когда RowID 2 имеет. Та же логика применима к RowID 9 и 10, но в это время RowID 9 имеет «Категория уровня 2», а строка 10 - нет. Если обоим дубликатам (RowID 1 и 2) будет присвоен «Уровень категории 3», нам не нужно удалять ни одного из них
IF OBJECT_ID('tempdb..#Category', 'U') IS NOT NULL
DROP TABLE #Category;
GO
CREATE TABLE #Category
(
RowID INT NOT NULL,
CategoryID INT NOT NULL,
ProductCategory VARCHAR(100) NOT NULL,
ProductName VARCHAR(100) NOT NULL,
[SubCategory Level 1 ID] INT NOT NULL,
[SubCategory Level 2 ID] INT NULL,
[SubCategory Level 3 ID] INT NULL,
[SubCategory Level 4 ID] INT NULL
);
INSERT INTO #Category (RowID, CategoryID, ProductCategory, ProductName, [SubCategory Level 1 ID], [SubCategory Level 2 ID], [SubCategory Level 3 ID], [SubCategory Level 4 ID])
VALUES
(1, 111, 'Furniture', 'Table', 200, 111, NULL, NULL),
(2, 234, 'Furniture', 'Table', 200, 234, 123, NULL),
(3, 122, 'Furniture', 'Chair', 200, 122, NULL, NULL),
(4, 122, 'Furniture', 'Chair', 200, 122, 32, NULL),
(5, 12, 'Auto', 'Trucks', 300, 766, 12, NULL),
(6, 3434, 'Auto', 'Trucks', 300, 322, 3434, 333),
(7, 332, 'Auto', 'Sport Vehicles', 300, 332, NULL, NULL),
(8, 332, 'Auto', 'Sport Vehicles', 300, 332, NULL, NULL),
(9, 300, 'Auto', 'Sedans', 300, 231, NULL, NULL),
(10, 300, 'Auto', 'Sedans', 300, NULL, NULL, NULL),
(11, 300, 'Auto', 'Cabriolet', 300, 456, 688, NULL),
(12, 300, 'Auto', 'Cabriolet', 300, 456, 976, NULL),
(13, 300, 'Auto', 'Motorcycles', 300, 456, 235, 334),
(14, 300, 'Auto', 'Motorcycles', 300, 456, 235, 334);
SELECT * FROM #Category;
-- ADD YOU CODE HERE TO RETURN the following RowIDs: 2, 4, 6, 9