关于sqlserver 的一个查询, 解决再加50分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于sqlserver 的一个查询, 解决再加50分相关的知识,希望对你有一定的参考价值。
在sqlserver中查询
实际的表结构如图1,想查询后获得类似图2表结构的dataset
前提是知道name1,name2,name3,name4,但是每个项里面不一定全有,没有的话使用null表示。另外一个问题(不是重点),存储过程接受的参数是以逗号隔开的字符串,能利用逗号分割成数组吗?
select sitename,
max(case when sname = 'name1' then value else null) name1,
max(case when sname = 'name2' then value else null) name2,
max(case when sname = 'name3' then value else null) name3,
max(case when sname = 'name4' then value else null) name4
from 表1
group by sitename
关于“以逗号隔开的字符串”的问题,是可以实现的,需要自己写函数或者存储过程。
这个在百度上应该可以找到相似功能的代码。改改就可以了。
多说一句,同样的问题提一次就可以了。有人知道肯定会回答的。
如果有问题请追问,没有疑问请采纳。追问
是没有提问成功提示,结果多点了一下提交就出来两个
追答没明白你的意思。结果不对吗?还是报错。是什么问题,不好描述的话截图。
追问你回答的本身没有问题,是百度提问时候没有提交的提示,结果多点了一下,就出来一个重复问题,应该有重复机制的,估计也是个bug
追答呵呵是这样的。
如果回答没有问题,请采纳。
--create table #t(sitename varchar(10),sname varchar(10),value int)
--insert into #t
--select 'a','name1',1
--union
--select 'a','name2',2
--union
--select 'a','name3',3
--union
--select 'a','name4',4
--union
--select 'b','name1',1
--union
--select 'b','name2',2
--union
--select 'b','name3',3
declare @sql varchar(8000)
select @sql=isnull(@sql+',','')+sname from #t group by sname
set @sql='select * from #t pivot (max(value) for sname in ('+@sql+'))a'
exec(@sql)
以上是关于关于sqlserver 的一个查询, 解决再加50分的主要内容,如果未能解决你的问题,请参考以下文章