DECLARE @SQLString varchar(8000)
DECLARE Cursor_A CURSOR FOR SELECT 客户状态 FROM CustomerStatus
SET @SQLString = 'SELECT COUNT(*) AS 客户总数'
DECLARE @StatNamea varchar(100) 
OPEN Cursor_A FETCH Next FROM Cursor_A INTO @StatNamea
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQLString = @SQLString + ','
    SET @SQLString = @SQLString + '(select count(客户状态) from CustomerContactHistory where 客户状态='''+@StatNamea+''' and OurEmployeeID=3) as '+@StatNamea
    FETCH Next FROM Cursor_A INTO @StatNamea
END
CLOSE Cursor_A
DEALLOCATE Cursor_ASET @SQLString = @SQLString + 'FROM CustomerInformation WHERE (客户删除 = 0) AND (OurEmployeeID = 3)'EXECUTE (@SQLString)

解决方案 »

  1.   

    变量作用域有问题
    --错误
    declare @name varchar;
    execute ('select @name = null')
    execute内部的变量与外部声明的变量没关系
    --正确
    declare @name varchar(100);
    select @name = 'a'
    execute ('declare @name varchar(100);select @name = ''b'';print @name')
    /*
    运行结果
    b
    */
      

  2.   

    DECLARE @SQLString varchar(8000)
    DECLARE Cursor_A CURSOR FOR SELECT 客户状态 FROM CustomerStatus
    SET @SQLString = 'SELECT COUNT(*) AS 客户总数'
    DECLARE @StatNamea varchar(100) 
    OPEN Cursor_A FETCH Next FROM Cursor_A INTO @StatNamea
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @SQLString = @SQLString + ','
        SET @SQLString = @SQLString + '(select count(客户状态) from CustomerContactHistory where 客户状态='''+@StatNamea+''' and OurEmployeeID=3) as '+@StatNamea
        FETCH Next FROM Cursor_A INTO @StatNamea
    END
    CLOSE Cursor_A
    DEALLOCATE Cursor_ASET @SQLString = @SQLString + 'FROM CustomerInformation WHERE (客户删除 = 0) AND (OurEmployeeID = 3)'EXECUTE (@SQLString)
      

  3.   

    提示     CustomerInformation  附近有错误
      

  4.   

    典型的动态交叉表查询问题,不需要用游标,动态SQL足矣
    ---------------------------------------------------------------------------
    --生成测试数据
    create table #a(aid int,名称 varchar(20))
    insert into #a select 1,'重要'
    insert into #a select 2,'不重要'
    insert into #a select 3,'狠不重要'
    create table #b(OurID int,名称 varchar(20),aid int)
    insert into #b select 3,'重要',1
    insert into #b select 3,'不重要',2
    insert into #b select 2,null,null
    insert into #b select 3,null,null
    insert into #b select 3,'狠不重要',3
    --执行动态交叉表查询
    declare @s varchar(8000)
    set @s = 'select count(*) as 客户总数'
    select 
        @s = @s+',['+名称+']=sum(case 名称 when '''+名称+''' then 1 else 0 end)'
    from
        #a
    order by
        aid
    set @s = @s + ' from #b'
    exec(@s)
    --输出结果
    /*
    客户总数  重要      不重要    狠不重要
    --------  --------  --------  --------
    5         1         1         1
    */
    --删除测试数据
    drop table #a,#b
    go
      

  5.   

    --
    SET @SQLString = @SQLString + '(select count(客户状态) from CustomerContactHistory where 客户状态=@StatNamea and OurEmployeeID=3)as @StatNamea'--
    这句有问题啊!--
    SET @SQLString = @SQLString + '(select count(客户状态) from CustomerContactHistory where 客户状态='+@StatNamea +'and OurEmployeeID=3)'--as列名为@StatNamea ,好像怎么用也有问题,这个不知道怎么改
      

  6.   

    客户状态='''+@StatNamea+''' ??????????????