将csv中的多行合并为一行

时间:2012-02-03 18:00:45

标签: sql csv

我已经获得了一堆csv格式的联系人:

companyID, companyName, contactId, firstName, lastName, email

并要求将单个公司的所有联系人合并为一行,如此

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

至于为什么他们想要这样的数据,我不知道。

只要它是免费提供的,我就不会受任何特定技术的束缚,而且我得到了正确的结果。你会如何实现这个目标?

到目前为止,我尝试导入postgres表并尝试各种连接和递归查询,但我无法提出正确的语法。

2 个答案:

答案 0 :(得分: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以外的列,或者您可以发布进程以删除这些列。

答案 1 :(得分:0)

这是一个潜在的解决方案:

  1. 创建一个Contact类来保存一个联系人的所有信息。
  2. 创建一个公司类来保存一家公司的信息。
  3. 创建Map<Company, List<Contact>>以将联系人映射到公司。
  4. 阅读文件,填写公司和联系人对象以及每家公司的List<Contact>
  5. 遍历地图的keySet。对于每个地图条目,输出公司和联系信息。
  6. OpenCSV可能会有所帮助。

    如果您没有找到开源CSV阅读器,您可以根据逗号(,)拆分该行,并在公司和联系人类中,只需实现类似public String toCSV()类的内容即可将对象输出为CSV。