日期:2014-05-16  浏览次数:20575 次

求问把多行数据里的一个字段值合并到一个单元格里
还是看下面描述比较清楚

表信息:
               tb                         --表名
      id              score         --列名
     1                  24            --列值
     1                  56            --列值
如何把它变成
               tb                           --表名
      id              score           --列名
     1               24,56           --列值

意思就是取出id相同的多行数据,把其中score的值合并到一条记录里该id的score的值。
         
------解决方案--------------------
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
UNION ALL SELECT 'c',3

--合并处理
SELECT col1,
col2=CAST(MIN(col2) as varchar)
+CASE 
WHEN COUNT(*)=3 THEN ','
+CAST((SELECT col2 FROM tb WHERE col1=a.col1 AND col2 NOT IN(MAX(a.col2),MIN(a.col2))) as varchar)
ELSE ''
END
+CASE 
WHEN COUNT(*)>=2 THEN ','+CAST(MAX(col2) as varchar)
ELSE ''
END
FROM tb a
GROUP BY col1