2013-08-08 5 views
1

У меня есть таблица, как следующее:SQL - Объединить все записи на основе их уникального идентификатора

GroupID  ID  Name Address AAA BBB CCC Other Columns 
    1  00111  AAA  ----- --- --- --- ------------ 
    1  00122  BBB  ----- --- --- --- ------------ 
    1  00133  CCC  ----- --- --- --- ------------ 
    2  00144  DDD  ----- --- --- --- ------------ 
    2  00155  EEE  ----- --- --- --- ------------ 
    3  00111  AAA  ----- --- --- --- ------------ 
    3  00177  GGG  ----- --- --- --- ------------ 
    4  00188  PPP  ----- --- --- --- ------------ 
    4  00199  OOO  ----- --- --- --- ------------ 
    4  00177  GGG  ----- --- --- --- ------------ 

Поэтому в основном все записи имеют одинаковый идентификатор группы являются потенциальными повторяющихся записей. Записи с одинаковым идентификатором могут отображаться в разных группах. Мне нужно перегруппировать их на основе ID и сделать их только один раз в таблице.

Если ID'00111' находится в группе 1 и 3, записи двух групп должны быть перегруппированы и иметь уникальный идентификатор группы. Обратите внимание, что в группе 3 ID '00177' также входит в группу 4, поэтому группы 3 и 4 должны перегруппироваться.

Так что результат будет иметь следующий вид:

GroupID  ID  Name Address AAA BBB CCC Other Columns 
1+3+4 00111  AAA  ----- --- --- --- ------------ 
1+3+4 00122  BBB  ----- --- --- --- ------------ 
1+3+4 00133  CCC  ----- --- --- --- ------------ 
1+3+4 00177  GGG  ----- --- --- --- ------------ 
1+3+4 00188  PPP  ----- --- --- --- ------------ 
1+3+4 00199  OOO  ----- --- --- --- ------------ 
    2  00144  DDD  ----- --- --- --- ------------ 
    2  00155  EEE  ----- --- --- --- ------------ 

Это является сложной задачей, и эта таблица имеет более 3 миллионов записей, но только 2 миллиона уникальных идентификаторов. Я собираюсь добавить еще один столбец, как Master Group ID, чтобы зафиксировать записи и объединить их. Но, как показано в примере, '00111' находится в группах 1 и 3, поэтому группа 1 и 3 должна объединяться, но в группе 3 другая запись '00177' появляется в группе 4, поэтому группы 1,3 и 4 должны объединяться. Похоже, эта большая цепочка никогда не кончится.

Любые предложения очень ценятся.

Благодаря

ответ

0

Не уверен, что если я полностью понял вопрос, но вы можете попробовать следующее:

SELECT SUM(GroupID) AS GroupID, ID, Name, Address, AAA, BBB, CCC, ... 
FROM MyTable 
GROUP BY ID, Name, Address, AAA, BBB, CCC, ... 

Продолжить список SELECT колонок с остатком ваших колонок.

+0

Спасибо, Майкл, но это работает только для дубликатов записей, оно не переносит остальные записи внутри этой группы. Пример: http://sqlfiddle.com/#!3/29d00/1 – Kric

+0

Как их «переносить»? –

+0

жаль, что я не был чист. Как показал мой пример, мне нужны 111,122,133,177,188 и 199 в одном и том же уникальном идентификаторе группы. : D – Kric

Смежные вопросы