日期:2014-05-17  浏览次数:20793 次

SQL大师来,问个查询语句
表结构和内容如下
Name--Age--NO--Remark
A--11--11--ABC
A--11--11--CCC
A--11--11--AAA
B--11--11--CCC
B--11--11--DDD
B--11--11--[NULL]
B--11--11--[NULL]
=======================================================
查询后的结果为
Name--Age--NO--Remark
A--11--11--ABC,CCC,CCC
B--11--11--CCC,DDD
B--11--11--[NULL]

就是前面三列数据重复的合并,后面一列不同的串起来。
重复的可能是2行,3行,或是更多行,求解。
补充一句,最后一列Remark会有NULL值,和前面是同样的处理方式,前三列合并,后面的就不用串起来了,还是写NUll

------解决方案--------------------
因为存在这样的资料,分组没有办法将NULL提出来
B--11--11--CCC
B--11--11--DDD
B--11--11--[NULL]
B--11--11--[NULL]
SQL code
WITH t AS (
  SELECT 'A' name,'11' age,'11' no,'ABC' remark FROM dual 
  UNION ALL 
  SELECT 'A' name,'11' age,'11' no,'CCC' remark FROM dual
  UNION ALL 
  SELECT 'A' name,'11' age,'11' no,'AAA' remark FROM dual
  UNION ALL 
  SELECT 'B' name,'11' age,'11' no,'CCC' remark FROM dual
  UNION ALL 
  SELECT 'B' name,'11' age,'11' no,'DDD' remark FROM dual
  UNION ALL 
  SELECT 'B' name,'11' age,'11' no,NULL remark FROM dual
  UNION ALL 
  SELECT 'B' name,'11' age,'11' no,NULL remark FROM dual 
)

SELECT name,age,no,wm_concat(remark) FROM t GROUP BY name,age,no;