从重复值中选择第一个记录名称

Selecting first record name from duplicate values

我正在写一个查询,我想 select PartNoDescription模型,和 AvaQty 来自视图。

但在我们的系统中,相同部件号的描述型号略有不同。

例如,A 部分有 描述 就像 This is Part A 并且还有另一条记录 描述喜欢这是Aa部分

在我的查询中,我想删除重复项并对 Ava 数量求和并显示。但是由于相同部件号的描述和型号不同,我在最终报告中得到了更多重复值。

这是我当前的代码。

SELECT DISTINCT PART_NO as PartNo, 
ad.INVENTORY_PART_API.Get_Description(contract,part_no) as PartDescription,
ad.Inventory_Product_Family_API.Get_Description(ad.Inventory_Part_API.Get_Part_Product_Family(CONTRACT, PART_NO)) as PartModel,
SUM( QTY_ONHAND - QTY_RESERVED) as AvaQty 
FROM ad.INVENTORY_PART_IN_STOCK_UIV 
WHERE CONTRACT is not null and 
upper(ad.Sales_Part_API.Get_Catalog_Group(CONTRACT, PART_NO)) = upper('SPAM')OR 
upper(ad.Sales_Part_API.Get_Catalog_Group(CONTRACT, PART_NO)) = upper('OTOA') 
GROUP BY PART_NO,
ad.INVENTORY_PART_API.Get_Description(contract,part_no),
ad.Inventory_Product_Family_API.Get_Description(ad.Inventory_Part_API.Get_Part_Product_Family(CONTRACT, PART_NO))

所以我得到了 14623 条记录,46 条记录是重复的,因为描述或模型彼此不同。那么有什么办法可以不复制就得到它吗?

我在没有 select 描述和型号的情况下尝试过。仅选择零件号和数量。然后记录没有重复记录。需要知道有没有什么方法可以 select PartNo 然后从重复值中分配描述和模型第一个记录或一些东西和数量的总和。谢谢

您希望每个零件编号一个结果行,因此按零件编号分组。每个零件号可以有不同的描述,因此请决定显示哪个。下面,我展示了字母表中的第一个 (MIN)。您还可以使用 MAX 显示最新的或 LISTAGG 显示全部。

SELECT
  part_no AS partno, 
  MIN(ad.inventory_part_api.get_description(contract,part_no)) AS partdescription,
  MIN(ad.inventory_product_family_api.get_description(ad.inventory_part_api.get_part_product_family(contract, part_no))) AS partmodel,
  SUM(qty_onhand - qty_reserved) AS avaqty 
FROM ad.inventory_part_in_stock_uiv 
WHERE contract IS NOT NULL 
AND UPPER(ad.sales_part_api.get_catalog_group(contract, part_no)) IN ('SPAM', 'OTOA')
GROUP BY part_no
ORDER BY part_no;

关于您的 WHERE 子句:您有 WHERE (contract IS NOT NULL AND catgrp = 'SPAM') OR (catgrp = 'OTOA'),因为 AND 优先于 OR。在我的查询中它是 WHERE (contract IS NOT NULL) AND (catgrp = 'SPAM' OR catgrp = 'OTOA')。我想这就是你真正想要的。否则改回来。

我会使用解析函数来解决这个任务。 例如,SUM(qty_onhand - qty_reserved) OVER (PARTITION BY PART_NO)。在这种情况下,您不必使用 GROUP BY.