2012-02-03 85 views
1

我已經給出了一堆聯繫人的CSV格式如下所示:合併從CSV多行到一行

companyID, companyName, contactId, firstName, lastName, email 

,並要求所有從單一公司聯繫人合併爲一個單行像這樣

companyID, companyName, contactId, firstName, lastName, email, companyName, contactId, firstName, lastName, email... 

至於他們爲什麼要這樣的數據,我不知道。

只要它是免費提供的,我就沒有被綁定到任何特定的技術,並且我得到了正確的結果。你會如何實現這一目標?

到目前爲止,我嘗試導入到postgres表中並嘗試各種連接和遞歸查詢,但我無法完全使用正確的語法。

+0

什麼是後端?當你寫在「CSV格式的聯繫人」是在一列或一個文件?這是否必須在SQL中,還是可以使用客戶端軟件來解決?你可以定位哪些客戶端軟件? – 2012-02-03 18:03:11

+0

我認爲處理這個問題的方法是在應用程序中,而不是w/sql。只需獲取數據並寫入文件,只需將每個公司的所有數據保存在同一行上即可。 – 2012-02-03 18:06:14

+0

不會爲此煩惱。不是我的專業領域,但Perl將是一個突出的候選人,可能在一行中... – 2012-02-03 18:07:13

回答

1

如果您有機會獲得在Windows的Unix/Linux或Cygwin的話,可以使用

sort csvFileName | awk -F, 'BEGIN {last="";} {if (last == $1) { printf ","; } else { printf "\n"; }; printf $0; last =$1; }' 

這將重複CompanyID各次,但你可以改變的printf $ 0到輸出列超過$ 1或你其他可以發佈進程來刪除這些列。

+0

謝謝,這看起來不錯。 – 2012-02-03 19:16:22

0

這是一個潛在的解決方案:

  1. 創建聯繫人類來保存所有信息的一個接觸。
  2. 創建一個公司類來保存一個公司的信息。
  3. 創建一個Map<Company, List<Contact>>將聯繫人映射到公司。
  4. 閱讀文件,填寫公司和聯繫人對象以及每個公司的List<Contact>
  5. 遍歷地圖的keySet。對於每個地圖條目,輸出公司和聯繫信息。

OpenCSV可能是有幫助的。

如果你沒有找到一個開源的CSV閱讀器,您可以拆分根據逗號(,)線並符合本公司及聯繫人類,只需要實現類似public String toCSV()類輸出對象爲CSV。

+0

這是更復雜,然後它需要,無需OOP here – 2012-02-03 18:10:54