急急急sqlserver怎么把行转成列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急急急sqlserver怎么把行转成列相关的知识,希望对你有一定的参考价值。
declare @sql varchar(5000),@totalLength int,@length int,@tag varchar(20),@currentNumber intset @sql='1,2,3,4,5,6,7,'
set @tag=','
set @totalLength=len(@sql)
set @length=charindex(@tag,@sql)
print '第1条记录: '+left(@sql,@length-1)
set @sql=substring(@sql,@length+1,@totalLength)
set @currentNumber=1
while (@length>0)
begin
set @currentNumber=@currentNumber+1
set @length=charindex(@tag,@sql)
if(@length=0)
begin
break;
end
print '第'+ltrim(str(@currentNumber))+'条记录:'+left(@sql,@length-1)
set @sql=substring(@sql,@length+1,@totalLength)
end 参考技术A 呵呵,动态属性?如果"动态"的话,你还是在应用层做行转列的动作比较好。
在database段写死就不好了。 参考技术B 拼sql吧
行列转化,写成死的不好,动态的去拼下就可以了
SQL中怎么将行转成列?
文章目录
天天这需求就神奇!!!!
SQL中怎么将行转成列?
我们以MySQL数据库为例,来说明行转列的实现方式。
首先,假设我们有一张分数表(tb_score),表中的数据如下图:
然后,我们再来看一下转换之后需要得到的结果,如下图:
可以看出,这里行转列是将原来的subject字段的多行内容选出来,作为结果集中的不同列,并根据userid进行分组显示对应的score。通常,我们有两种方式来实现这种转换。
1. 使用 CASE…WHEN…THEN 语句实现行转列,参考如下代码:
SELECT userid,
SUM(CASE `subject` WHEN '语文' THEN score ELSE 0 END) as '语文',
SUM(CASE `subject` WHEN '数学' THEN score ELSE 0 END) as '数学',
SUM(CASE `subject` WHEN '英语' THEN score ELSE 0 END) as '英语',
SUM(CASE `subject` WHEN '政治' THEN score ELSE 0 END) as '政治'
FROM tb_score
GROUP BY userid
注意,SUM() 是为了能够使用GROUP BY
根据userid进行分组,因为每一个userid对应的
subject="语文"的记录只有一条,所以SUM() 的值就等于对应那一条记录的score的值。假如userid ='001' and subject='语文'
的记录有两条,则此时SUM() 的值将会是这两条记录的和,同理,使用Max()的值将会是这两条记录里面值最大的一个。但是正常情况下,一个user对应一个subject只有一个分数,因此可以使用SUM()、MAX()、MIN()、AVG()
等聚合函数都可以达到行转列的效果。
2. 使用 IF() 函数实现行转列,参考如下代码:
SELECT userid,
SUM(IF(`subject`='语文',score,0)) as '语文',
SUM(IF(`subject`='数学',score,0)) as '数学',
SUM(IF(`subject`='英语',score,0)) as '英语',
SUM(IF(`subject`='政治',score,0)) as '政治'
FROM tb_score
GROUP BY userid
注意, IF(subject='语文',score,0)
作为条件,即对所有subject='语文’的记录的score字段进行SUM()、MAX()、MIN()、AVG()
操作,如果score没有值则默认为0。
以上是关于急急急sqlserver怎么把行转成列的主要内容,如果未能解决你的问题,请参考以下文章