Выберите Top Row в Group By без какого-либо числового агрегирования - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь построить Таблицу предметов в доступе.У меня есть номер элемента, имя mfg и описание продукта.Я хотел бы, чтобы мой PK был номером пункта и именем mfg.Тем не менее, у меня есть около 5 тыс. Областей, в которых описание продукта создает дубликаты на основе небольшого изменения самого описания.Я хотел бы просто иметь доступ, создать таблицу, сгруппировав все элементы на основе номера элемента и имени mfg, а затем выбрать первый результат.

ПРИМЕЧАНИЕ: метод, который я попробовал ниже, использует 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 4 мл 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

Идея до сих пор, что у меня есть, чтобы посчитать длину описания для количественной оценки.Затем используйте мин / макс, чтобы выбрать тот, который требуется.Пока мой код:

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;

Однако, похоже, он не работает.У меня все еще есть дубликаты в данных.

Любая помощь будет замечательной.

1 Ответ

0 голосов
/ 18 марта 2019

В итоге я добавил порядковый номер в оператор выбора, который будет последовательно для каждой группы. Затем я просто выбрал первый ряд каждой последовательности. Код ниже

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...