DECLARE @Tj_Top_Value  int   -- top的值,由用户输入
DECLARE @All_Count  intSET @Tj_Top_Value =5
Set @orthercount  = .........
以下语句出错:
EXEC('select top  '+ @Tj_Top_Value +'籍贯, COUNT(*) AS 人数
       FROM 人员记录表
       GROUP BY 籍贯
       ORDER BY 人数 DESC 
UNION all 
select coun(*) from 人员记录表 where 籍贯 not in('select top  '+ @Tj_Top_Value +'籍贯, COUNT(*) AS 人数
       FROM 人员记录表
       GROUP BY 籍贯')

解决方案 »

  1.   

    DECLARE @Tj_Top_Value  int   -- top的值,由用户输入
    DECLARE @All_Count  intSET @Tj_Top_Value =5
    Set @orthercount  = .........
    declare @sql varchar(8000)
    set @sql='select * from (select top  '+ cast(@Tj_Top_Value as varchar(20)) +' 籍贯, COUNT(*) AS 人数
           FROM 人员记录表
           GROUP BY 籍贯
           ORDER BY 人数 DESC ) as t UNION all select ''其它'+'','+cast(@orthercount as varchar(20))exec (@sql)
      

  2.   

    我发现 UNION 语句前有 order by 语句时会出错,是什么原因?
      

  3.   

    把order by 人数 DESC放最后试试DECLARE @Tj_Top_Value  int   -- top的值,由用户输入
    DECLARE @All_Count  intSET @Tj_Top_Value =5
    Set @orthercount  = .........
    declare @sql varchar(8000)
    set @sql='select * from (select top  '+ cast(@Tj_Top_Value as varchar(20)) +' 籍贯, COUNT(*) AS 人数
           FROM 人员记录表
           GROUP BY 籍贯) as t UNION all select ''其它'+'','+cast(@orthercount as varchar(20))+' order by 人员记录表.人数 DESC'exec (@sql)
      

  4.   

    谢谢各位高手!在你们的提示下问题基本解决,现又有如下新麻烦:  SET @All_Count= (EXEC('SELECT COUNT(*) AS 总人数
                             FROM 人员记录表 where 在岗=1'+ @cd_str ))
    为什么出错?
    在关键字 'EXEC' 附近有语法错误。
    ')' 附近有语法错误。
      

  5.   

    exec 不能嵌套到语句中用
    直接这样写就行:
    SELECT @All_Count=COUNT(*) AS 总人数FROM 人员记录表 where 在岗=1'+ @cd_str
      

  6.   

    纠正一下: 
    EXEC('SELECT @All_Count=COUNT(*) AS 总人数
                             FROM 人员记录表 where 在岗=1'+ @cd_str )