Обновление столбца SQL для решения проблемы качества данных - PullRequest
0 голосов
/ 01 февраля 2019

Я не могу понять, как написать «умный код» для этого.problem sample

В этом случае я бы хотел, чтобы конечный результат для первых двух случаев был:

product_cat_name

A_SEE

A_BEE

Бизнес-правило таково, что один product_cat_name может принадлежать только одному group, но из-за проблем с качеством данных у нас иногда есть product_cat_name, принадлежащий двум различнымgroup s.В качестве особого случая в такой ситуации мы хотели бы добавить group к product_cat_name, чтобы product_cat_name стало уникальным.

Звучит так просто, но я ломаю голову над этим.Любая помощь высоко ценится.

Ответы [ 2 ]

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

Это просто, если разбить его на мелкие кусочки.

Вам, очевидно, нужно ОБНОВИТЬ таблицу и изменить значение product_cat_name.Это легко.

Новое значение должно быть group + product_cat_name.Это просто.

Вы хотите сделать это только тогда, когда product_cat_name связан с более чем одной группой.Это, вероятно, сложная часть, но она также может быть разбита на небольшие легкие кусочки.

Вам необходимо определить, какие product_cat_name имеют более одной группы.Это легко.GROUP BY product_cat_name HAVING COUNT(DISTINCT Group) > 1.

Теперь вам нужно использовать это, чтобы ограничить ОБНОВЛЕНИЕ только этими product_cat_name с.Это легко.WHERE product_cat_name IN (Subquery using above logic to get PCNs that have more than one Group).

Все простые шаги.Соедините их вместе, и вы получите свое решение.

0 голосов
/ 01 февраля 2019

Примерно так:

with names as (

    select prod_cat_nm , prod_cat_nm+group as new_nm from (query that joins 3 tables together) as qry
    join
    (Select prod_cat_nm,  count(distinct group)
    from (query that joins 3 tables together) as x
    group by 
    prod_cat_nm
    having count(distinct group) > 1) dups
    on dups.prod_cat_nm = qry.prod_cat_nm
    )

    SELECT prod_cat_nm, STRING_AGG(New_nm, '') WITHIN GROUP (ORDER BY New_Nm ASC) AS new_prod_cat_nm
    FROM names
    GROUP BY prod_cat_nm;

Я использовал здесь STRING_AGG () как самый короткий для записи - но вы можете легко изменить это, чтобы использовать рекурсии или путь XML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...