关于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

追答

呵呵是这样的。
如果回答没有问题,请采纳。

参考技术A sqlserver2005以上可以用旋转函数,当然可以手写罗列输出列,这样写可以动态添加

--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分的主要内容,如果未能解决你的问题,请参考以下文章

Java实现贵宾使用时间过期 自动 冻结此用户(更改用户当前状态)解决了,再加50分

关于SQLServer 2000 索引问题

sqlserver数某一个值的数量

sqlserver字段长度50和5000的区别

sql 子查询返回的值不止一个怎么解决?

「考试」省选50