2010-07-20 93 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