2010-07-20 89 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 2010-07-20 08:59:35

+0

嗯......这是因为上面的“表格”实际上是加入了很多观点的查询结果,并且如果我获得了许可,我正在查看完整的检修结果。仍然感谢指出正常化是DB世界的一个好习惯。 我本质上不是一个数据库程序员,因此我不擅长使用SQL。 – Chris 2010-07-20 09:06:16

回答

0

我所采用的办法here

与表变量来保存临时结果设置为从工作(黑客)。

Sorted!

1

不要这样做。相反,将表格进一步标准化为例如一个Person,Preference和一个Color表(其中Preference,如果这是关系的正确名称,则具有Person和Color的外键)。这样,您就避免了不一致的风险(如果您喜欢,可以使Person名称具有唯一性,但应使使Color名称唯一)。

编辑:如果你从加入查询中得到这个数据,我会假设数据是合理的一致的,所以规范化不是问题。是否有可能将名称上的联接查询更改为GROUP?真的,比结果集中的黑客干净得多!

+0

(好天啊,我实际上一直在管理美国人的拼写颜色,现在**,**就是力量!:-) – 2010-07-20 09:05:39

+0

我与之相抗争。干得好那个男人:) – Oded 2010-07-20 09:07:33

+0

好吧,忘了提及这是一个结果集存储在一个表变量,所以不知道如果规范化它会有所帮助。 我只需要找到方法来识别重复的行,然后使用coalesce函数来构建一个所有“Color”字符串并将其放入新列中,但真的不知道如何去做。 (我尝试着通过将颜色拼成彩色来冒充美国人,这让我颇有点自我控制,我不得不说。我认为我的模拟效果很好:-) – Chris 2010-07-20 09:11:23