日志正文
|
||
实现过程的完整SQL如下,然后一步步看执行结果。 搜狐微博上传图片有问题,这里直接复制数据库执行的文本结果。 create table #tmp ( EmpNo varchar(20) not null, --员工编号 PrjNo varchar(20) not null --员工所属项目类型 ) insert into #tmp values ('1001', 'A'), ('1001', 'B'), ('1002', 'B') select * from #tmp 表查询结果如下: EmpNo PrjNo1001 A 1001 B 1002 B select * from #tmp for xml path for xml path将查询结果以XML格式显示。结果如下: XML_F52E2B61-18A1-11d1-B105-00805F49916B <row><EmpNo>1001</EmpNo><PrjNo>A</PrjNo></row><row><EmpNo>1001</EmpNo><PrjNo>B</PrjNo></row><row><EmpNo>1002</EmpNo><PrjNo>B</PrjNo></row> select * from #tmp for xml path('') for xml path('')比for xml path(),显示更简单,去掉了<row>节点。结果如下: XML_F52E2B61-18A1-11d1-B105-00805F49916B <EmpNo>1001</EmpNo><PrjNo>A</PrjNo><EmpNo>1001</EmpNo><PrjNo>B</PrjNo><EmpNo>1002</EmpNo><PrjNo>B</PrjNo> select ',' + PrjNo from #tmp for xml path('') 对列进行“+”运算后,不以XML格式显示了,只有节点内容。结果如下: XML_F52E2B61-18A1-11d1-B105-00805F49916B ,A,B,B select EmpNo, ',' + PrjNo from #tmp for xml path('') 多加一列后,又以XML格式显示,计算列没有指定列名。结果如下: XML_F52E2B61-18A1-11d1-B105-00805F49916B <EmpNo>1001</EmpNo>,A<EmpNo>1001</EmpNo>,B<EmpNo>1002</EmpNo>,B SELECT EmpNo, STUFF( ( SELECT ',' + PrjNo FROM #tmp WHERE EmpNo = T.EmpNo FOR XML PATH('') ), 1, 1, '') AS PrjNoJoin FROM #tmp AS T STUFF函数删除 for xml path('')处理后多余的逗号“,”。结果如下: EmpNo PrjNoJoin 1001 A,B 1001 A,B 1002 B SELECT DISTINCT EmpNo, STUFF( ( SELECT ',' + PrjNo FROM #tmp WHERE EmpNo = T.EmpNo FOR XML PATH('') ), 1, 1, '') AS PrjNoJoin FROM #tmp AS T 最后对数据去重。结果如下图: EmpNo PrjNoJoin 1001 A,B 1002 B
最后修改于 2020-10-19 17:01
阅读(?)评论(0)
|
||
评论 想第一时间抢沙发么?