declare @sql varchar(8000) 
set @sql='select plevel'
select @sql=@sql+',['+dd+']=sum(case convert(varchar(10),workdate,120) when '''+dd+''' then Times*qty else 0 end)'
from (select distinct dd=convert(varchar(10),workdate,120) from tb) ss
set @sql=@sql+' from tb group by plevel'
exec(@sql)
我把上面的换成了下面的:
declare @sql varchar(8000)
set @sql='select plevel'
select @sql=@sql+',['+dd+']=sum(case convert(varchar(10),workdate,120) when '''+dd+''' then Times*qty else 0 end)'
from (select distinct dd=convert(varchar(10),workdate,120) from (Select a.* from(Select plevel,workdate,qty*times as ff from tb group by plevel,workdate,qty*times ) a where ff>500)) ss
set @sql=@sql+' from tb group by plevel'
exec(@sql)
就提示Incorrect syntax near ')'
我就是把倒数第三行的表tb换成了(Select a.* from(Select plevel,workdate,qty*times as ff from tb group by plevel,workdate,qty*times ) a where ff>500),这句语句执行没有问题的。为什么放在这里就出错了?
请高手帮忙!谢谢!

解决方案 »

  1.   


    declare @sql varchar(8000)
    set @sql='select plevel'
    select @sql=@sql+',['+dd+']=sum(case convert(varchar(10),workdate,120) when '
    +''''+dd+'''' +' then Times*qty else 0 end)'
    from (select distinct dd=convert(varchar(10),workdate,120) from (Select a.* from(Select plevel,workdate,qty*times as ff from tb group by plevel,workdate,qty*times ) a where ff>500)) ss
    set @sql=@sql+' from tb group by plevel'
    exec(@sql)--还有错的花酒print  @sql出来看看哪儿有问题
      

  2.   

    还有错,不给print啊,过不到语法。
      

  3.   


    declare @sql varchar(8000)
    set @sql='select plevel'
    select 
    @sql=@sql+
    ',['+dd+']=sum(
    case convert(varchar(10),workdate,120) 
    when '''+dd+''' 
    then Times*qty 
    else 0 
    end
    )'
    from (
    select distinct 
    dd=convert(varchar(10),workdate,120) 
    from (
    Select 
    a.* 
    from
    (
    Select 
    plevel,
    workdate,
    qty*times as ff 
    from tb 
    group by plevel,workdate,qty*times 
    ) a 
      )tmp
    where ff>500
      
    ) ss
    set @sql=@sql+' from tb group by plevel'
    exec(@sql)
      

  4.   


    declare @sql varchar(8000)
    set @sql='select plevel'
    select @sql=@sql+',['+dd+']=sum(case convert(varchar(10),workdate,120) when '''+dd+''' then Times*qty else 0 end)'
    from 
    (
    select distinct dd=convert(varchar(10),workdate,120) 
    from 
    (
    Select a.* 
    from
    (
    Select plevel,workdate,qty*times as ff 
    from tb 
    group by plevel,workdate,qty*times 
    ) a 
    where ff>500
    ) ss) aa
    set @sql=@sql+' from tb group by plevel'
      

  5.   

    楼上的是通过了,但是得出的结果还有小于500的?
    以下是表tb
    ID qty times workdate plevel
    1 99 8 2012-1-1 kive
    2 98 8.6 2012-1-10 kive
    3 95 8.9 2012-1-1 john
    4 67 9 2012-1-2 john
    5 80 8 2012-1-7 john
    6 59 8.2 2012-1-1 li
    7 55 9.1 2012-1-10 li
    8 37 8 2012-1-14 low
    9 39 8.7 2012-1-15 low
    10 48 10 2012-1-20 low
      

  6.   

    ID qty times workdate plevel
    1 99 8 2012-1-1 kive
    2 98 8.6 2012-1-10 kive
    3 95 8.9 2012-1-1 john
    4 67 9 2012-1-2 john
    5 80 8 2012-1-7 john
    6 59 8.2 2012-1-1 li
    7 55 9.1 2012-1-10 li
    8 37 8 2012-1-14 low
    9 39 8.7 2012-1-15 low
    10 48 10 2012-1-20 low