日期:2014-05-17  浏览次数:20670 次

江湖救急,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应该怎样处理呢?

------解决方案--------------------
建议你切割字符串再拼爹
------解决方案--------------------
SQL code

 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 #a
print @sql
/*
 sum(isnull(2010,0)) 2010 sum(isnull(2011,0)) 2011 sum(isnull(2012,0)) 2012

*/

------解决方案--------------------
SQL code

 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 #a
select @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里面新建的一个窗口等等。
------解决方案--------------------
遇到问题时,首先多查查联机丛书,你才会有进步,比如删除表,你打开联机丛书,然后在左下方选【索引】选项卡,然后输入:删除表 就有结果了。
------解决方案--------------------
不能说访问,应该是连接,因为一个连接可能会发起多个操作。都会对数据库做访问。
------解决方案--------------------
我觉得你还是先理解这个方法吧。你的基础搞太多反而会乱掉。
------解决方案--------------------
那就熟练应用吧。凭你刚才的几个问题,我大概也知道你的底子了,还是先打扎实了再算吧。我不想给个新方法你还要回复一大堆,