【发布时间】:2019-10-05 06:51:15
【问题描述】:
我有一个数据集,其中包含一些值匹配的列,但其余列值不匹配。我需要删除较低级别(Level2、Level3 和 Level 4)的子类别“不为空”但其相应的“重复伙伴”(按 [SubCategory Level 1 ID]、[Product Category] 和 [Product Name] 分组)的重复项) 具有相同的较低级别子类别 - “IS NULL”。根据下表,我需要删除 ID 2、4、6 和 9(见红色字体突出显示)。
我已经尝试使用 Partition By 的 Dense_Rank、Rank 和 Row_Number 函数,但这并没有给我不想要的输出。也许我需要使用它们的组合...
例如:RowID 1 和 2 与 [Product Category]、[Product Name]、[Category Level 1] 重复。 “Category Level 1”只是“Product Category”的一个ID。需要删除 RowID 2,因为其对应的重复伙伴 RowID 1 没有在 RowID 2 具有时分配“类别级别 3”。相同的逻辑适用于第 9 行和第 10 行,但此时第 9 行具有“类别级别 2”,而第 10 行没有。如果两个重复项(RowID 1 和 2)都分配了“Category Level 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
【问题讨论】:
-
请显示您现有的查询
-
您的要求很难理解。您能解释一下为什么要删除 2、4、6 和 9 吗?
-
嗨 Forpas,出于同样的原因,它们应该被删除。例如:RowID 1 和 2 按 [Product Category]、[Product Name]、[Category Level 1] 重复。 “Category level 1”只是“Product Category”的一个ID。需要删除 RowID 2,因为它的对应伙伴 RowID 1 没有在 RowID 2 有时分配“类别级别 3”。 RowID 9 和 10 的逻辑相同,但此时 RowID 9 具有“Category Level 2”,而 RowID 10 没有。如果两个重复项(RowID 1 和 2)都分配了“Category Level 3”,我们就不需要删除它们中的任何一个。
标签: sql-server group-by duplicates partitioning dense-rank