SqlServer 通过xml进行行转列
·
一.Sqlserver行转列有三种方式
1.对于确定得列字段可以用case when,这种用得少就不细说
2.用pivot()动态行转列,但是时在SQL2005之后得版本才能用
想了解得请去我之前写的 pivot动态行转列
今天我想说的第三种方法是在SQLSERVER2005之前版本的行转列
- for xml path 就是将查询结果集以XML形式展现
select SPDM,gg1dm,
(select ' ' + gg2dm as gg2dm from FSENDMX a where a.djbh = 'ESFST230411103903' and a.spdm=b.spdm and a.gg1dm=b.gg1dm for xml path('')) gg2
,(select ' ' + cast(cast(sl as int) as varchar(100)) sl from FSENDMX a where a.djbh = 'ESFST230411103903' and a.spdm=b.spdm and a.gg1dm=b.gg1dm for xml path('')) sl
from FSENDMX b where DJBH ='ESFST230411103903' group by SPDM,gg1dm

- STUFF字符串函数是将字符串插入到另一个字符串中。它会删除开始位置第一个字符串中的指定长度的字符,然后将第二个字符串插入到开始位置的第一个字符串中,语法如下:
STUFF(<character_expression>,,,<character_expression>)
然后将这两个一组合
WITH A AS(
select mx.spdm,spmc, gg1dm,g1.GGMC as gg1mc,sum(sl) sl,sum(je) as je,avg(dj) as dj from FSENDMX mx
inner JOIN SHANGPIN SP ON SP.SPDM=MX.SPDM
inner JOIN GUIGE1 G1 ON MX.GG1DM=G1.GGDM
where djbh='ESFST230411103903'
group by djbh, mx.spdm,spmc, gg1dm,g1.GGMC
)
SELECT spdm,spmc,gg1dm,gg1mc,sl,dj,je
,stuff(
(select ' '+ gg2 from (select djbh, spdm, gg1dm,GGMC+'*'+cast(cast(sl as int) as varchar(100)) as gg2
from FSENDMX mx
inner JOIN GUIGE2 G2 ON MX.GG2DM=G2.GGDM) b
where DJBH ='ESFST230411103903' and SPDM=a.SPDM and GG1DM=a.GG1DM for xml path('')),1,1,''
) as cmmx
from A a group by spdm,SPMC, gg1dm,gg1mc,sl,dj,je

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)