上次问问题zzxap大哥给解决了,现在又有问题了,这段代码是以表中相同的一列的值最为新列插入到表的后面,我觉得一般的人不一定看得懂源代码是这样
declare @Sql nvarchar (4000)
set @Sql = 'select ccuscode,ccusname'
select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
from (select  distinct top 50 CCusName from customer) a
set @Sql = @Sql + ' from customer '
print @Sql
print len(@Sql)
exec (@Sql)现在我要在customer表里再做一个子查询,就改成这样declare @Sql nvarchar (4000)
set @Sql = 'select ccuscode,ccusname'
select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
from (select  distinct top 50 CCusName from (select * from customer) b) a
set @Sql = @Sql + ' from b '
print @Sql
print len(@Sql)
exec (@Sql)可是提示对象名 b 无效
怎么办

解决方案 »

  1.   

    把后面的from b中的b换成(select * from customer) b
      

  2.   

    select  distinct top 50 CCusName from (select * from customer) 
    你的这句是什么意思???
      

  3.   

    set @Sql = @Sql + ' from b ' 
    删除就好了
      

  4.   

    这个子查询做的有意义吗?
    select  distinct top 50 CCusName from (select * from customer) bselect  distinct top 50 CCusName from customer这两个结果又区别吗?
    脱了裤子放屁
      

  5.   

    他这里的b应该是给下面的用的
    这句set @Sql = @Sql + ' from b '
      

  6.   


    你的方法我想到了,事实情况是那个子查询select * from customer 其实是一个非常复杂的查询,这样的话岂不是又查了一边,有没有我用再查一遍的方法
      

  7.   


    虽然是“脱了裤子放屁” 但这里并没有错错的是后面 :set @Sql = @Sql + ' from b ' 你自己都看不懂了,拼这么复杂干吗?乱
      

  8.   


    楼主数据库是2000的还是05的,要是05的就用CTE
      

  9.   

    其实我就是想在set @Sql = @Sql + ' from b '  最后这里,如果能用的上前边查询的结果就好了
      

  10.   

    05的,不过让我查查什么是cte
      

  11.   


    如您所说,我原来就是临时表的,这不是想改成sql嘛
      

  12.   

    05的;WITH
    b AS(
    select * from customer  --换成你要的查询
    )
    declare @Sql nvarchar (4000)
    set @Sql = 'select ccuscode,ccusname'
    select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
    from (select  distinct top 50 CCusName from  b) a
    set @Sql = @Sql + ' from b '
    print @Sql
    print len(@Sql)
    exec (@Sql) 
      

  13.   

    使用cte 是不是要调用什么组件啊,怎么总说我with附近有语法错误呢
      

  14.   

    楼主,你不是有Print Sql打印出来吗?
    你把打印出来的sql拿去检验一下就知道错误了,按你写的,最后是:
    select ccuscode,
           ccusname,
           case ccusname
             when 'ccusname' then
              pubufts
           end ccusname
      from (select distinct top 50 CCusName from (select * from customer) b) a
      from b最后那个from b,是哪个b?
    你拼接SQL,要先保证你拼的Sql执行没错,再去拼接
      

  15.   

    这样写没有多大意思,因为你这个b不是实际表也不是临时表或者内存表,
    而且在Sql的上下文中还没有处于一级。
    你还是在select * from customer一下吧!
      

  16.   

    from (select  distinct top 50 CCusName from (select * from customer) b) a 
    你把这句改成from (select  distinct top 50 CCusName from ((select * from customer) b)) a 
    试试
    因为你那样写的那个b不是指代的你想查询的b
      

  17.   

    去掉set @Sql = @Sql + ' from b '