Дедупликация данных - PullRequest
       11

Дедупликация данных

2 голосов
/ 22 сентября 2010

Приведенный ниже код лучше всего объясняет, чего я пытаюсь достичь. Я знаю, что могу использовать курсор или другую процедуру зацикливания для циклического перебора записей, чтобы найти дубликаты и создать свои записи заметок на основе того, что найдено. Я пытаюсь избежать этого, если нет лучшего варианта.

DROP TABLE #orig
DROP TABLE #parts
DROP TABLE #part_notes

CREATE TABLE #orig(partnum VARCHAR(20), notes VARCHAR(100));
INSERT INTO #orig VALUES ('A123', 'To be used on Hyster models only')
INSERT INTO #orig VALUES ('A123', 'Right Hand model only')
INSERT INTO #orig VALUES ('A125', 'Not to be used by Jerry')
INSERT INTO #orig VALUES ('A125', NULL)
INSERT INTO #orig VALUES ('A125', 'asdfasdlfj;lsdf')
INSERT INTO #orig VALUES ('A128', 'David test')
INSERT INTO #orig VALUES ('A129', 'Fake part')

SELECT COUNT(*) FROM #orig

-- SHOW ME UNIQUE PARTS, MY PARTS TABLE SHOULD BE UNIQUE!
SELECT DISTINCT partnum FROM #orig


CREATE TABLE #parts(id INT IDENTITY(1,1), partnum VARCHAR(20));
INSERT INTO #parts
SELECT DISTINCT partnum FROM #orig

SELECT * FROM #parts

CREATE TABLE #part_notes(id INT IDENTITY(1,1), part_id INT, line_number INT, notes VARCHAR(100));
/*
    HOW DO I AT THIS POINT POPULATE the #part_notes table so that it looks like this:
    (note: any NULL or empty note strings should be ignored)

    id  part_id line_number notes
    1   1       1           To be used on Hyster models only    
    2   1       2           Right Hand model only
    3   2       1           Not to be used by Jerry
    4   2       2           asdfasdlfj;lsdf
    6   3       1           David test
    7   4       1           Fake part

*/

1 Ответ

1 голос
/ 22 сентября 2010

Ниже просто произвольно выбираются номера_строки, так как в данных нет ничего подходящего для order by.

SELECT   p.id part_id,
         p.partnum   ,
         ROW_NUMBER() over (partition BY p.id ORDER BY (SELECT 0)) line_number,
         notes
FROM     #parts p
         JOIN #orig o
         ON       o.partnum=p.partnum
WHERE    notes   IS NOT NULL
AND      notes            <> ''
ORDER BY part_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...