【发布时间】:2019-03-18 23:03:54
【问题描述】:
我正在尝试在访问中构建一个项目表。我有项目编号、制造商名称和产品描述。我希望我的 PK 是项目编号和制造商名称。但是,我有大约 5k 个区域,其中产品描述根据描述本身的细微变化创建重复项。我想通过根据项目编号和制造商名称对所有项目进行分组来创建表,然后选择第一个结果。
注意:我在下面尝试的方法使用 MIN/MAX。这不一定是建议的方法。最终目标是为每个组选择顶行或单行因此,如果我有 2 个零件号表示 123 和 2 个该零件号的产品描述,我只想显示其中一个描述。哪个都无所谓。
例子:
Item_Num、MFG_Name、Product_Desc
414001000, AMBU INC., ASCOPE 3,LARGE,5.8/2.8 5EA/BX
414001000, AMBU INC., ASCOPE 3,LARGE,5.8/2.8 5EA/BX
06L21-01, ABBOTT LABORATORIES INC, 07K0040AT HAVAB-M CALB 4ML RX
06L21-01, ABBOTT LABORATORIES INC, ARCHITECT HAVAB-M CALB 4ML RX
理想情况下,这是我的结果:
Item_Num、MFG_Name、Product_Desc
414001000, AMBU INC., ASCOPE 3,LARGE,5.8/2.8 5EA/BX
06L21-01, ABBOTT LABORATORIES INC, 07K0040AT HAVAB-M CALB 4ML RX
到目前为止,我的想法是计算描述的长度以进行量化。然后使用 min/max 选择所需的那个。到目前为止我的代码是:
SELECT
x.distributor_item_number,
x.mfg_item_number,
x.mfg_name,
x.distributor_product_description,
min(x.[LENGTH OF DESC])
INTO Product_Table
FROM [Product Table] AS x
INNER JOIN
(SELECT p.distributor_item_number,
max(p.[LENGTH OF DESC]) AS [MAX LENGTH]
FROM [Product Table] AS p
GROUP BY p.distributor_item_number) AS y ON (y.distributor_item_number = x.distributor_item_number) AND (y.[MAX LENGTH] = X.[LENGTH OF DESC])
GROUP BY x.distributor_item_number, x.mfg_item_number, x.mfg_name, x.distributor_product_description;
但是,它似乎不起作用。我的数据中仍有重复项。
任何帮助都会很棒。
【问题讨论】:
-
使用 min/max 选择所需的 哪个是所需的?最小或最大长度的那个?
-
可能有不止 1 个具有相同的最小/最大长度。
-
老实说,长度无关紧要。最终目标是每组选择 1 个。这是对表在描述中具有重复值的表进行标准化的尝试。谢谢
-
distributor_item_number 是否对每个 distributor_product_description 都是唯一的?如果不是,distributor_item_number 和 mfg_item_number 之间是什么关系?当您提到我的数据中仍然存在重复项时,请同时显示不想要的结果。