例如社保类信息表,每个人交一年,会产生12条数据,那么一个地区50W人,就可能会产生五六百万条数据,如果用来对比分析就可能影响效率,如何将12条变1条,且不损失里边的数据呢?
这就需要用到 for xml path('')
例子:如汉东省渔船登记表,一个人下边可能有3,4条船,每条船可能是不同的类型,不同的功率,可以用到这个方法,将几行数据合并一行
select 所有人证件号,
(select distinct 渔船编码+',' from [汉东省渔船登记表] /*比对身份证号,并去重*/
where 所有人证件号=A.所有人证件号
for xml path('')) as 渔船编码,
(select distinct 船舶所有人名称+',' from 汉东省渔船登记表
where 所有人证件号=A.所有人证件号
for xml path('')) as 船舶所有人名称,
(select distinct 船舶类型+',' from 汉东省渔船登记表
where 所有人证件号=A.所有人证件号
for XML path('')) as 船舶类型,
(select 主机总功率+',' from 汉东省渔船登记表 /*功率不可去重*/
where 所有人证件号=A.所有人证件号
for xml path('')) as 主机总功率
from (select 所有人证件号 from 汉东省渔船登记表) A /*因为使用身份证对比,提取出,不用比对其他参数,节省大量时间*/
GROUP BY 所有人证件号
order by 所有人证件号
最后的效果如图,将该人名下的渔船汇总出