--STUFF用法, ReportDetail 表存储的PersonelID为A,B,C,D 查询出来将对应A B C D 转换成人的姓名姓名1,姓名2,姓名3,姓名4
STUFF((SELECT ','+Personnel.PersonnelName FROM Personnel WHERE a.PersonnelId LIKE '%'+Personnel.PersonnelId+'%'
FOR XML PATH('')),1,1,'') PersonName,
--删除重复列
delete from tbAccount
where NaturalCode in (select NaturalCode from tbAccount group by NaturalCode having count(NaturalCode) > 1)
and AutoID not in (select min(AutoID) from tbAccount
group by NaturalCode having count(NaturalCode)>1)
--根据多个主键删除重复列
delete t
FROM
(SELECT *,ROW_NUMBER() OVER(partition BY Period
,LegalEntity
,ino_id
,BUZEI ORDER BY Period) AS Row FROM tbl_Journal with(nolock)
where period>'201405'
) AS t
WHERE Row>1
--根据关键字查询相关存储过程
select o.name,c.text from sys.objects o
inner join syscomments c on o.object_id=c.id
where o.type='P' AND c.text like '%Approved%'
--行转列 Priovt
if object_id('tempTb')is not null drop table tempTb
go
create table tempTb (姓名 varchar(10),课程 varchar(10),分数 int)
insert into tempTb values('张三','语文',74)
insert into tempTb values('张三','数学',83)
insert into tempTb values('张三','物理',93)
insert into tempTb values('李四','语文',74)
insert into tempTb values('李四','数学',84)
insert into tempTb values('李四','物理',94)
go
declare @sql varchar(8000)
set @sql='' --初始化变量@sql
select @sql=@sql+','+课程 from tempTb group by 课程--变量多值赋值
--STUFF 函数将字符串插入到另一个字符串中。 它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插入到第一个字符串的开始位置。
--stuff(字符串,从1个字符,删除一个字符,插入一个新的字符串)
set @sql=stuff(@sql,1,1,'')--去掉首个','
set @sql='select * from tempTb pivot (max(分数) for 课程 in ('+@sql+')) a'
exec(@sql)
select 姓名,
sum(case 课程 when'语文'then 分数 else 0 end)语文,
sum(case 课程 when'数学'then 分数 else 0 end)数学,
sum(case 课程 when '物理'then 分数 else 0 end)物理
from tempTb
group by 姓名