exec p_area '421002'
exec p_area '421003'
exec p_area '421081'
exec p_area '421083'
exec p_area '421087'
exec p_area '421022'
exec p_area '421023'
exec p_area '421024'

解决方案 »

  1.   


    这个好像没办法只出现一次表头的,不过你可以考虑,先建个临时表:if object_id('tempdb..#temp')
     drop table #temp
     
     
    create table #temp (列 类型,...)
    insert into #temp
    exec p_area '421002'insert into #temp
    exec p_area '421003'insert into #temp
    exec p_area '421081'insert into #temp
    exec p_area '421083'insert into #temp
    exec p_area '421087'insert into #temp
    exec p_area '421022'insert into #temp
    exec p_area '421023'insert into #temp
    exec p_area '421024'--然后
    select * from #temp
      

  2.   


    这个好像没办法只出现一次表头的,不过你可以考虑,先建个临时表:if object_id('tempdb..#temp')
     drop table #temp
     
     
    create table #temp (列 类型,...)
    insert into #temp
    exec p_area '421002'insert into #temp
    exec p_area '421003'insert into #temp
    exec p_area '421081'insert into #temp
    exec p_area '421083'insert into #temp
    exec p_area '421087'insert into #temp
    exec p_area '421022'insert into #temp
    exec p_area '421023'insert into #temp
    exec p_area '421024'--然后
    select * from #temp
    如果把临时表建在存储过程里面是不会会更好点?
    调用不变,最后一次调用就是以前调用的全部数据。
      

  3.   

    还有第二个列转行:if object_id('s') is not null
       drop table s
    gocreate table s(id int,score int)INSERT INTO s
    SELECT 1, 150
    UNION ALL SELECT 2, 133
    UNION ALL SELECT 3, 123
    UNION ALL SELECT 4, 80
    UNION ALL SELECT 5, 90
    UNION ALL SELECT 6, 60
    UNION ALL SELECT 7, 34
    UNION ALL SELECT 8, 21
    UNION ALL SELECT 9, 102
    godeclare @table_name nvarchar(100);
    declare @sql nvarchar(max);
    declare @start int;
    declare @end int;
    declare @interval int;select @start = 0,    --开始的分数
           @end = 150,    --结束的分数
           @interval = 20,--这里的间隔改为20
           @sql = '',
           @table_name = 's';  --这里的表的名称是s;with t
    as
    (
    select @start as start_score,@start + @interval as end_score
    union all
    select start_score + @interval,
           case when end_score + @interval > @end
                     then @end
                else end_score + @interval
           end
    from t
    where start_score + @interval < @end
    ),tt
    as
    (
    select start_score,
           end_score,
           cast(end_score as varchar) +'-'+cast(start_score as varchar) as score_range
    from t
    )select @sql = @sql + 
                  ' union all select '''+score_range+''' as ['+score_range +'] ,count(case when score >'+cast(start_score as varchar) + 
                  ' and score <= '+cast(end_score as varchar) + 
                  ' then 1 else null end) as v ' +
                  ' from '+@table_name 
    from tt
    select @sql = STUFF(@sql,1,len(' union all'),'')exec(@sql)
    /*
    20-0 v
    20-0 0
    40-20 2
    60-40 1
    80-60 1
    100-80 1
    120-100 1
    140-120 2
    150-140 1
    */