Группировка по и не отдельные столбцы и нормализация данных - PullRequest
1 голос
/ 19 января 2010

У меня есть большая таблица (60 столбцов, 1,5 миллиона записей) денормализованных данных в MS SQL 2005, которые были импортированы из базы данных Access. Мне было поручено нормализовать и вставить эти данные в нашу модель данных.

Я хотел бы создать запрос, который использовал бы группировку, например «customer_number», и возвратил результирующий набор, содержащий только те столбцы, которые не различаются для каждого customer_number. Я не знаю, возможно ли это вообще, но было бы очень полезно, если бы это было.

Изменить: если в моей таблице 3 столбца (cust_num, cust_name_cust_address) и 5 ​​записей

|cust_num|cust_name|cust_address
|01      |abc      |12 1st street
|02      |cbs      |1 Aroundthe Way
|01      |abc      |MLK BLVD
|03      |DMC      |Hollis Queens
|02      |cbs      |1 Aroundthe Way

результаты моего желаемого запроса должны быть просто данными из cust_num и cust_name, потому что cust_address имеет разные значения для этой группировки cust_num. Cust_num имеет много адресов, но только одно cust_name.

Может ли кто-нибудь указать мне правильное направление?

Jim

Ответы [ 2 ]

2 голосов
/ 19 января 2010
WITH    q AS
        (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, … ORDER BY id) AS rn
        FROM    mytable
        )
SELECT  *
FROM    q
WHERE   rn = 2

Это выберет только те строки, которые имеют дубликаты во всех столбцах, перечисленных в предложении PARTITION BY (фактически, он выберет первый дубликат, если таковой имеется).

0 голосов
/ 29 января 2010

Нет, этого нельзя сделать

...