2010-07-20 2 views
0

У меня есть таблица со следующими выборочными данными:Снизить и Объединить повторяющиеся строки

Name Color 

Alice Green 
Bob  Black 
Chris Green 
Chris Black  
David Red 
Peter Blue 
Simon Blue 
Simon Red 
Simon Green 

В конце концов, я хочу, чтобы уменьшить таблицу путем консолидации колонки цвета, как:

Name Color 

Alice Green 
Bob  Black 
Chris Green, Black 
David Red 
Peter Blue 
Simon Blue, Red, Green 

такое, что имя может стать уникальным.

таблица не имеет первичного ключа, я дошел до создания нового столбца с помощью ROW_NUMBER разграничения между дубликатами, но не знаю, что делать дальше .:

rownumber Name Color 

1   Alice Green 
1   Bob  Black 
1   Chris Green 
2   Chris Black  
1   David Red 
1   Peter Blue 
1   Simon Blue 
2   Simon Red 
3   Simon Green 
+1

Почему вы хотите, чтобы ваша база данных _denormalize_? Нормализованные таблицы обычно считаются хорошими. – Oded

+0

Хмм ... Это потому, что вышеприведенная таблица - это результат запроса от JOINing во многих представлениях, и я смотрю полный пересмотр, если мне дадут разрешение. Тем не менее, благодаря тому, что нормализация является хорошей практикой в ​​мире БД. Я по сути не программист БД, поэтому я не очень хорошо разбираюсь в SQL, но все это смущает. – Chris

ответ

0

я принял подход here

с табличной переменной для хранения временного набора результатов работы (хак) с.

Отсортировано!

1

Не делайте этого. Вместо этого нормализовать ваши таблицы далее, например, таблицу Person, Preference и Color (где Preference, если это правильное имя для отношения, имеет внешние ключи для Person и Color). Таким образом, вы избегаете рисков несоответствий (вы можете сделать имена персонажей уникальными, если хотите, но вы должны должны сделать имена цветов уникальными).

EDITED: если вы получаете это из запроса на соединение, я предполагаю, что данные достаточно согласованы, поэтому нормализация не является проблемой. Можно ли изменить запрос соединения на GROUP на имя вместо этого? На самом деле намного чище, чем взломать результирующий набор!

+0

(Боже мой, я на самом деле управлял американским написанием цвета последовательно. Теперь, ** это будет сила! :-) –

+0

Я борюсь с тем же. Хорошо сделано, что человек :) – Oded

+0

Ну, забыл упомянуть, что это результирующий набор, хранящийся в переменной таблицы, поэтому не уверен, что нормализация этого поможет. Мне просто нужно найти способы идентифицировать повторяющиеся строки, а затем использовать функцию coalesce для создания строки из всех «Цветных» и поместить ее в новый столбец как-то, но действительно не знаю, как это сделать. (Я старался выдавать себя за американца по цвету как цвет, и это потребовало от меня немного самоконтроля, я должен сказать. Я думаю, что мое олицетворение сработало хорошо :-) – Chris

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