2012-01-11 82 views
2

它更容易解释我需要使用示例进行的操作;SQL:使用第二列中的所有值从第一列中提取不同的值

表看起来像这样

Col 1,  Col 2 
1,   a 
1,   b 
2,   a 
2,   b 
2,   c 

我需要一个查询返回的东西像

1,a,b 
2,a,b,c 
+1

您正在使用哪些DBMS? – 2012-01-11 17:52:43

+0

什么都没有,我真的不知道从哪里开始,也没有运气搜索谷歌找到一个地方开始 – user1143778 2012-01-11 17:54:34

+0

在你的情况,解决方案可能会有很大的不同,这取决于你有哪些数据库:MySQL,PostgreSQL,Oracle,SQL Server等等 – 2012-01-11 19:22:07

回答

2

你会希望有一个线,如:

UPDATE t 
SET t.dupcustodians = dt.custadmin 
FROM tbldoc t 
     INNER JOIN (SELECT t1._dupid, 
          (SELECT DISTINCT custadmin + ', ' 
          FROM tbldoc t2 
          WHERE t2._dupid = t1._dupid 
          ORDER BY custadmin + ', ' 
          FOR XML PATH('')) AS custadmin 
        FROM tbldoc t1 
        GROUP BY _dupid) AS dt 
     ON t._dupid = dt._dupid 
      ; 

我有一个类似的问题在“CustAdmin”字段中所有内容都有名称,然后它们都有可能重复的_DupID值。我希望它在一个新字段“DupCustodians”中列出所有在_DupID值从一个记录到下一个记录时的名称。因此,将这些名称与需要的字段名称交换(并且不要忘记更改表名称,当然),并且您应该很好。

2

好吧,如果你正在使用MySQL,那么你可以这样做:没有MySQL的具体GROUP_CONCAT功能可能需要更复杂的查询

SELECT Col1, GROUP_CONCAT(Col2) 
FROM MyTable 
GROUP BY Col1 

其他数据库。

相关问题