sql - 在没有任何数字聚合的情况下选择分组依据中的第一行
问题描述
我正在尝试在访问中构建一个项目表。我有项目编号、制造商名称和产品描述。我希望我的 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,雅培实验室公司,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,雅培实验室公司,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;
但是,它似乎不起作用。我仍然在数据中有重复项。
任何帮助都会很棒。
解决方案
我最终在 select 语句中添加了一个序列号,该序列号将为每个组排序。然后我只选择了每个序列的第一行。下面的代码
SELECT
p1.mfg_item_number,
p1.mfg_name,
p1.distributor_product_description,
Count(*) AS Seq
INTO Clean_Product_Table
FROM Product_Table AS p1
INNER JOIN Product_Table AS p2 ON (p2.mfg_item_number = p1.mfg_item_number)
AND (P2.MFG_NAME = P1.MFG_NAME)
AND (p2.InoSeq <= p1.InoSeq)
GROUP BY p1.mfg_item_number,
p1.mfg_name,
p1.distributor_product_description
HAVING COUNT(*) = 1
ORDER BY 1, 2, 5;
推荐阅读
- arrays - 按数组中的值对 JSON 进行排序 (node.js)
- android - AndroidX PreferenceFragmentCompat 找不到片段的 id id/内容的视图
- html - 我不知道为什么这个动画有效
- python - What is the right way in python to instantiate an object based on the object name?
- regex - 用正则表达式匹配单词的多次迭代
- python-3.x - 理解布尔掩码后的“剩余”索引。它们是新列还是什么?
- angular - ngx-datatable - 选择未注册的事件
- java - 交换两个 int 值
- pandas - 如何过滤高于 x 数的值?
- html - 如何使对象不随页面html + css滚动