STUFF(( select ','+b.lname+case when rs>1 then '('+cast(rs as varchar(20))+'人,总分'++REPLACE(cast(round(score,2) as nvarchar(20)),'0000','')+'分'+')' else '' end+REPLACE(cast(round(score2,2) as nvarchar(20)),'0000','')+'分'
from v_pj_rep1_lname_score b
where b.projectCid=a.projectcid and b.wxmpCid=a.wxmpCid order by count_sortid for xml path('')
),1,1,'') as dname from
v_pj_rep1_lname_score a group by projectcid,wxmpcid
GO
复制代码
关键说明见下表:
序号关键语句说明1round(sum(score2)*0.2,2) score, round(sum(score2)*0.2*0.3,2) score2,取权重值,并使用ROUND函数取后两位小数2 STUFF((
select ','+b.lname+case when rs>1 then '('+cast(rs as varchar(20))+'人,总分'++REPLACE(cast(round(score,2) as nvarchar(20)),'0000','')+'分'+')' else '' end+REPLACE(cast(round(score2,2) as nvarchar(20)),'0000','')+'分'
from v_pj_rep1_lname_score b
where b.projectCid=a.projectcid and b.wxmpCid=a.wxmpCid order by count_sortid for xml path('')
),1,1,'') as dname
使用 STUFF 函数配合 SQL 语句 FOR XML PATH 来实现行转列。
SQL语句中通过 CASE 来判定人数,大于1则显示人数和总分,否则直接显示分值,并在前面加上职务 lname 字段,并以 count_sortid 举行排序,数值越小的职务越往前排
3v_pj_rep1_lname_score a group by projectcid,wxmpcid对视图样本举行项目ID和被评价人ID举行分组统计
小结
SQL Server 中的 STUFF 函数是将字符串插入到另一个字符串中。 它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插入到第一个字符串的开始位置。
详细语法请参照:https://learn.microsoft.com/zh-cn/sql/t-sql/functions/stuff-transact-sql?view=sql-server-ver16&redirectedfrom=MSDN
至此STUFF的函数使用我们就先容到这里,详细使用中我们还必要机动把握,对效果数据的细节大概要进一步举行处理,以满足我们的统计要求。并可设计导出到 WORD或EXCEL文件举行下载。