江湖救急,SQL怎么进行“字符串”的转化?
SQL语句:
declare @DateValue nvarchar(150)
declare @DateListSum nvarchar(150)
set @DateValue='2010,2011,2012'
set @DateListSum = 'sum(isnull(' +REPLACE(@DateValue,',',',0)),sum(isnull(') +',0))'
print @DateValue
print @DateListSum
print 'sum(isnull(2010,0)) 2010,sum(isnull(2011,0)) 2011,sum(isnull(2012,0)) 2012'
运行结果:
2010,2011,2012
sum(isnull(2010,0)),sum(isnull(2011,0)),sum(isnull(2012,0))
sum(isnull(2010,0)) 2010,sum(isnull(2011,0)) 2011,sum(isnull(2012,0)) 2012
问题:
现在的SQL语句中可以将“ 2010,2011,2012”转化为“sum(isnull(2010,0)),sum(isnull(2011,0)),sum(isnull(2012,0))” , 但是怎样转化为“sum(isnull(2010,0)) 2010,sum(isnull(2011,0)) 2011,sum(isnull(2012,0)) 2012” 呢???
也就是作完“sum”求和后,加上原有的列名,SQL应该怎样处理呢?
[解决办法]
建议你切割字符串再拼爹
[解决办法]
declare @str varchar(max) set @str='2010,2011,2012' create table #a ( name varchar(255) ) declare @s varchar(max) set @s='insert #a select '+''''+REPLACE(@str,',',''''+' union all select '+'''')+'''' --print @s exec(@s) declare @sql varchar(max) set @sql=''select @sql=@sql+' '+'sum(isnull('+name+',0))'+' '+name from #aprint @sql/* sum(isnull(2010,0)) 2010 sum(isnull(2011,0)) 2011 sum(isnull(2012,0)) 2012*/
[解决办法]
declare @str varchar(max) set @str='2010,2011,2012' create table #a ( name varchar(255) ) declare @s varchar(max) set @s='insert #a select '+''''+REPLACE(@str,',',''''+' union all select '+'''')+'''' --print @s exec(@s) declare @sql varchar(max) set @sql=''select @sql=@sql+','+'sum(isnull('+name+',0))'+' '+name from #aselect @sql=right(@sql,len(@sql)-1)print @sql/*sum(isnull(2010,0)) 2010,sum(isnull(2011,0)) 2011,sum(isnull(2012,0)) 2012*/
[解决办法]
你的功底怎么几乎为零 啊,删除表是drop table 啊,#这种开头的临时表正常情况下会自动删除,但是作为实践经验,最好用完手动删除。#是作用在一个【会话】当中,也可以理解为一个链接。或者你在SQLServer Management studio里面新建的一个窗口等等。
[解决办法]
遇到问题时,首先多查查联机丛书,你才会有进步,比如删除表,你打开联机丛书,然后在左下方选【索引】选项卡,然后输入:删除表 就有结果了。
[解决办法]
不能说访问,应该是连接,因为一个连接可能会发起多个操作。都会对数据库做访问。
[解决办法]
我觉得你还是先理解这个方法吧。你的基础搞太多反而会乱掉。
[解决办法]
那就熟练应用吧。凭你刚才的几个问题,我大概也知道你的底子了,还是先打扎实了再算吧。我不想给个新方法你还要回复一大堆,